softpipe: use new softpipe_resource_data() accessor
authorBrian Paul <brianp@vmware.com>
Thu, 25 Jul 2013 15:27:09 +0000 (09:27 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 31 Jul 2013 12:53:48 +0000 (06:53 -0600)
We should probably be using map()/unmap() when accessing resource
data, but this is a little better.

v2: assert that the resource is not a display target, per Jose.

Reviewed-by: José Fonseca <jfonseca@vmware.com>
src/gallium/drivers/softpipe/sp_draw_arrays.c
src/gallium/drivers/softpipe/sp_state_shader.c
src/gallium/drivers/softpipe/sp_texture.h

index 45b1390de4d2987be0161eb3e7a71ba2a5b58b05..6b06f70a16e08575855fbbd6010676bd2c8445c8 100644 (file)
@@ -81,7 +81,7 @@ softpipe_draw_vbo(struct pipe_context *pipe,
          if (!sp->vertex_buffer[i].buffer) {
             continue;
          }
-         buf = softpipe_resource(sp->vertex_buffer[i].buffer)->data;
+         buf = softpipe_resource_data(sp->vertex_buffer[i].buffer);
          size = sp->vertex_buffer[i].buffer->width0;
       }
       draw_set_mapped_vertex_buffer(draw, i, buf, size);
@@ -92,7 +92,7 @@ softpipe_draw_vbo(struct pipe_context *pipe,
       unsigned available_space = ~0;
       mapped_indices = sp->index_buffer.user_buffer;
       if (!mapped_indices) {
-         mapped_indices = softpipe_resource(sp->index_buffer.buffer)->data;
+         mapped_indices = softpipe_resource_data(sp->index_buffer.buffer);
          if (sp->index_buffer.buffer->width0 > sp->index_buffer.offset)
             available_space =
                (sp->index_buffer.buffer->width0 - sp->index_buffer.offset);
@@ -107,7 +107,7 @@ softpipe_draw_vbo(struct pipe_context *pipe,
 
 
    for (i = 0; i < sp->num_so_targets; i++) {
-      void *buf = softpipe_resource(sp->so_targets[i]->target.buffer)->data;
+      void *buf = softpipe_resource_data(sp->so_targets[i]->target.buffer);
       sp->so_targets[i]->mapping = buf;
    }
 
index d80955e696c673515ea6be3cc275e98d202d4864..eb4b6b1458ce68c907ff620997d1bf68c5e62d3a 100644 (file)
@@ -357,7 +357,7 @@ softpipe_set_constant_buffer(struct pipe_context *pipe,
    }
 
    size = cb ? cb->buffer_size : 0;
-   data = constants ? softpipe_resource(constants)->data : NULL;
+   data = constants ? softpipe_resource_data(constants) : NULL;
    if (data)
       data = (const char *) data + cb->buffer_offset;
 
index 533d6252e259b5ae2cbffd2956e46f989698e3c3..96609f4348973b12e14ac12142c0d12c8a5a2347 100644 (file)
@@ -93,6 +93,22 @@ softpipe_transfer(struct pipe_transfer *pt)
 }
 
 
+/**
+ * Return pointer to a resource's actual data.
+ * This is a short-cut instead of using map()/unmap(), which should
+ * probably be fixed.
+ */
+static INLINE void *
+softpipe_resource_data(struct pipe_resource *pt)
+{
+   if (!pt)
+      return NULL;
+
+   assert(softpipe_resource(pt)->dt == NULL);
+   return softpipe_resource(pt)->data;
+}
+
+
 extern void
 softpipe_init_screen_texture_funcs(struct pipe_screen *screen);