diff options
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_buffer.c')
-rw-r--r-- | src/gallium/drivers/softpipe/sp_buffer.c | 7 |
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; |