galahad: do map/unmap counting for resources
authorBrian Paul <brianp@vmware.com>
Fri, 3 Sep 2010 22:35:07 +0000 (16:35 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 3 Sep 2010 22:35:07 +0000 (16:35 -0600)
src/gallium/drivers/galahad/glhd_context.c
src/gallium/drivers/galahad/glhd_objects.h

index 383c448926160195584a1616142a7697427de14a..5b56a4d0edb3af7e460149d9ef7a1ff78ef30b33 100644 (file)
@@ -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);
index 935803915db73152e0705485468bc20ce103bf9e..dc74c5bebc9635f170f781240ef5a6816bd3b275 100644 (file)
@@ -42,6 +42,8 @@ struct galahad_resource
    struct pipe_resource base;
 
    struct pipe_resource *resource;
+
+   int map_count;
 };