From: Brian Paul Date: Fri, 3 Sep 2010 22:35:07 +0000 (-0600) Subject: galahad: do map/unmap counting for resources X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3b8182793b4f7d87ba274de152fb106996e75098;p=mesa.git galahad: do map/unmap counting for resources --- diff --git a/src/gallium/drivers/galahad/glhd_context.c b/src/gallium/drivers/galahad/glhd_context.c index 383c4489261..5b56a4d0edb 100644 --- a/src/gallium/drivers/galahad/glhd_context.c +++ b/src/gallium/drivers/galahad/glhd_context.c @@ -54,6 +54,10 @@ galahad_draw_vbo(struct pipe_context *_pipe, struct galahad_context *glhd_pipe = galahad_context(_pipe); struct pipe_context *pipe = glhd_pipe->pipe; + /* XXX we should check that all bound resources are unmapped + * before drawing. + */ + pipe->draw_vbo(pipe, info); } @@ -860,6 +864,10 @@ galahad_context_transfer_map(struct pipe_context *_context, struct pipe_context *context = glhd_context->pipe; struct pipe_transfer *transfer = glhd_transfer->transfer; + struct galahad_resource *glhd_resource = galahad_resource(_transfer->resource); + + glhd_resource->map_count++; + return context->transfer_map(context, transfer); } @@ -890,6 +898,14 @@ galahad_context_transfer_unmap(struct pipe_context *_context, struct galahad_transfer *glhd_transfer = galahad_transfer(_transfer); struct pipe_context *context = glhd_context->pipe; struct pipe_transfer *transfer = glhd_transfer->transfer; + struct galahad_resource *glhd_resource = galahad_resource(_transfer->resource); + + if (glhd_resource->map_count < 1) { + glhd_warn("context::transfer_unmap() called too many times" + " (count = %d)\n", glhd_resource->map_count); + } + + glhd_resource->map_count--; context->transfer_unmap(context, transfer); diff --git a/src/gallium/drivers/galahad/glhd_objects.h b/src/gallium/drivers/galahad/glhd_objects.h index 935803915db..dc74c5bebc9 100644 --- a/src/gallium/drivers/galahad/glhd_objects.h +++ b/src/gallium/drivers/galahad/glhd_objects.h @@ -42,6 +42,8 @@ struct galahad_resource struct pipe_resource base; struct pipe_resource *resource; + + int map_count; };