mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-11 05:50:14 +01:00
softpipe/buffer: load only as many components as the the buffer resource type provides
Otherwise we risk to read past the end of the buffer. In addition, change the loop counters to unsigned to be consistent with the types. Fixes:afa8707ba9softpipe: add SSBO/shader atomics support. Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Dave Airlie <airlied@redhat.com> (cherry picked from commit865b9ddae4)
This commit is contained in:
parent
914ac06e32
commit
9b51dcf1e2
1 changed files with 5 additions and 2 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue