summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Rowley <timothy.o.rowley@intel.com>2016-04-18 18:10:39 -0500
committerTim Rowley <timothy.o.rowley@intel.com>2016-04-20 09:57:55 -0500
commit3bbe8a09eaf95548313db13b4e56dbdd35d2755e (patch)
treeff6f7df0d233f9cdb0966df3e06c43c520361ee5
parent2ac2ecdd6c407e6d731474572193326844571f5e (diff)
downloadmesa-3bbe8a09eaf95548313db13b4e56dbdd35d2755e.tar.gz
mesa-3bbe8a09eaf95548313db13b4e56dbdd35d2755e.tar.xz
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@intel.com> Tested-by: Markus Wick <markus@selfnet.de>
-rw-r--r--src/gallium/drivers/swr/swr_resource.h2
-rw-r--r--src/gallium/drivers/swr/swr_state.cpp12
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) {