summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2010-09-03 16:35:07 -0600
committerBrian Paul <[email protected]>2010-09-03 16:35:07 -0600
commit3b8182793b4f7d87ba274de152fb106996e75098 (patch)
treecf1eccdc52715a3ede7c366fb5d9d5ba804cfc2c /src/gallium/drivers
parentf1de38b851d274b16e8b58669a110b0124e0f40b (diff)
galahad: do map/unmap counting for resources
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/galahad/glhd_context.c16
-rw-r--r--src/gallium/drivers/galahad/glhd_objects.h2
2 files changed, 18 insertions, 0 deletions
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;
};