swr: fix resource backed constant buffers
authorTim Rowley <timothy.o.rowley@intel.com>
Mon, 18 Apr 2016 23:10:39 +0000 (18:10 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Wed, 20 Apr 2016 14:57:55 +0000 (09:57 -0500)
Code was using an incorrect address for the base pointer.

v2: use swr_resource_data() utility function.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94979
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
Tested-by: Markus Wick <markus@selfnet.de>
src/gallium/drivers/swr/swr_resource.h
src/gallium/drivers/swr/swr_state.cpp

index 59cf028..00001e9 100644 (file)
@@ -85,7 +85,7 @@ swr_resource_is_texture(const struct pipe_resource *resource)
 }
 
 
-static INLINE void *
+static INLINE uint8_t *
 swr_resource_data(struct pipe_resource *resource)
 {
    struct swr_resource *swr_r = swr_resource(resource);
index ded51a9..4ce2d12 100644 (file)
@@ -936,8 +936,7 @@ swr_update_derived(struct pipe_context *pipe,
             max_vertex = size / pitch;
             partial_inbounds = size % pitch;
 
-            p_data = (const uint8_t *)swr_resource_data(vb->buffer)
-               + vb->buffer_offset;
+            p_data = swr_resource_data(vb->buffer) + vb->buffer_offset;
          } else {
             /* Client buffer
              * client memory is one-time use, re-trigger SWR_NEW_VERTEX to
@@ -989,8 +988,7 @@ swr_update_derived(struct pipe_context *pipe,
              * size is based on buffer->width0 rather than info.count
              * to prevent having to validate VBO on each draw */
             size = ib->buffer->width0;
-            p_data =
-               (const uint8_t *)swr_resource_data(ib->buffer) + ib->offset;
+            p_data = swr_resource_data(ib->buffer) + ib->offset;
          } else {
             /* Client buffer
              * client memory is one-time use, re-trigger SWR_NEW_VERTEX to
@@ -1138,7 +1136,8 @@ swr_update_derived(struct pipe_context *pipe,
          pDC->num_constantsVS[i] = cb->buffer_size;
          if (cb->buffer)
             pDC->constantVS[i] =
-               (const float *)((const uint8_t *)cb->buffer + cb->buffer_offset);
+               (const float *)(swr_resource_data(cb->buffer) +
+                               cb->buffer_offset);
          else {
             /* Need to copy these constants to scratch space */
             if (cb->user_buffer && cb->buffer_size) {
@@ -1163,7 +1162,8 @@ swr_update_derived(struct pipe_context *pipe,
          pDC->num_constantsFS[i] = cb->buffer_size;
          if (cb->buffer)
             pDC->constantFS[i] =
-               (const float *)((const uint8_t *)cb->buffer + cb->buffer_offset);
+               (const float *)(swr_resource_data(cb->buffer) +
+                               cb->buffer_offset);
          else {
             /* Need to copy these constants to scratch space */
             if (cb->user_buffer && cb->buffer_size) {