From c465184d2685d91f85c4a6999ddd561f22512ccb Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Tue, 3 Jan 2023 14:23:28 -0800 Subject: [PATCH] freedreno: Fix tracking of enabled SSBOs Clearing all of the modified bits an relying on OR'ing the needed bits back in the loop below doesn't quite work out, Because of early continue if the SSBO has not changed. Fixes: 0ed053f03d9 ("freedreno: simplify fd_set_shader_buffers(..)") Signed-off-by: Rob Clark Part-of: (cherry picked from commit e41d19a7119f2ad92d1765842e066cb84b90014b) --- .pick_status.json | 2 +- src/gallium/drivers/freedreno/freedreno_state.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 0416d373e46..a557b1cd9d0 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4108,7 +4108,7 @@ "description": "freedreno: Fix tracking of enabled SSBOs", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "0ed053f03d936d301091dd68e96ced8dbedc83b2" }, diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c index a23870b797e..f5bcd886c44 100644 --- a/src/gallium/drivers/freedreno/freedreno_state.c +++ b/src/gallium/drivers/freedreno/freedreno_state.c @@ -164,7 +164,6 @@ fd_set_shader_buffers(struct pipe_context *pctx, enum pipe_shader_type shader, struct fd_shaderbuf_stateobj *so = &ctx->shaderbuf[shader]; const unsigned modified_bits = u_bit_consecutive(start, count); - so->enabled_mask &= ~modified_bits; so->writable_mask &= ~modified_bits; so->writable_mask |= writable_bitmask << start; @@ -194,6 +193,8 @@ fd_set_shader_buffers(struct pipe_context *pctx, enum pipe_shader_type shader, } } else { pipe_resource_reference(&buf->buffer, NULL); + + so->enabled_mask &= ~BIT(n); } }