Mesa (master): swr: fix resource backed constant buffers

Tim Rowley torowley at kemper.freedesktop.org
Wed Apr 20 15:05:23 UTC 2016


Module: Mesa
Branch: master
Commit: 3bbe8a09eaf95548313db13b4e56dbdd35d2755e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3bbe8a09eaf95548313db13b4e56dbdd35d2755e

Author: Tim Rowley <timothy.o.rowley at intel.com>
Date:   Mon Apr 18 18:10:39 2016 -0500

swr: fix resource backed constant buffers

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 at intel.com>
Tested-by: Markus Wick <markus at selfnet.de>

---

 src/gallium/drivers/swr/swr_resource.h |  2 +-
 src/gallium/drivers/swr/swr_state.cpp  | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/swr/swr_resource.h b/src/gallium/drivers/swr/swr_resource.h
index 59cf028..00001e9 100644
--- a/src/gallium/drivers/swr/swr_resource.h
+++ b/src/gallium/drivers/swr/swr_resource.h
@@ -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);
diff --git a/src/gallium/drivers/swr/swr_state.cpp b/src/gallium/drivers/swr/swr_state.cpp
index ded51a9..4ce2d12 100644
--- a/src/gallium/drivers/swr/swr_state.cpp
+++ b/src/gallium/drivers/swr/swr_state.cpp
@@ -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) {




More information about the mesa-commit mailing list