summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/softpipe/sp_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_buffer.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_buffer.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/gallium/drivers/softpipe/sp_buffer.c b/src/gallium/drivers/softpipe/sp_buffer.c
index 3ec738527af..4b0617e0bea 100644
--- a/src/gallium/drivers/softpipe/sp_buffer.c
+++ b/src/gallium/drivers/softpipe/sp_buffer.c
@@ -55,7 +55,8 @@ sp_tgsi_load(const struct tgsi_buffer *buffer,
struct pipe_shader_buffer *bview;
struct softpipe_resource *spr;
unsigned width;
- int c, j;
+ unsigned ncomp;
+ unsigned c, j;
unsigned char *data_ptr;
const struct util_format_description *format_desc = util_format_description(PIPE_FORMAT_R32_UINT);
@@ -63,6 +64,8 @@ sp_tgsi_load(const struct tgsi_buffer *buffer,
goto fail_write_all_zero;
bview = &sp_buf->sp_bview[params->unit];
+ ncomp = util_format_get_nr_components(bview->buffer->format);
+
spr = softpipe_resource(bview->buffer);
if (!spr)
goto fail_write_all_zero;
@@ -88,7 +91,7 @@ sp_tgsi_load(const struct tgsi_buffer *buffer,
continue;
}
data_ptr = (unsigned char *)spr->data + bview->buffer_offset + s_coord;
- for (c = 0; c < 4; c++) {
+ for (c = 0; c < ncomp; c++) {
format_desc->fetch_rgba_uint(sdata, data_ptr, 0, 0);
((uint32_t *)rgba[c])[j] = sdata[0];
data_ptr += 4;