From bceb47d57b39863ddebabaaffeb3cfc276bb6e29 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 12 Jan 2021 18:40:23 -0500 Subject: [PATCH] zink: flag ssbo buffer resources as having pending writes per stage I meant to squash this down but didn't get around to it Fixes: e79d905f5a0 ("zink: flag ssbo buffer resources as having pending writes on batch") Reviewed-by: Adam Jackson Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_context.c | 4 ++-- src/gallium/drivers/zink/zink_context.h | 2 +- src/gallium/drivers/zink/zink_draw.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 7943946ad43..71025a9262e 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -600,8 +600,8 @@ zink_set_shader_buffers(struct pipe_context *pctx, struct zink_context *ctx = zink_context(pctx); unsigned modified_bits = u_bit_consecutive(start_slot, count); - ctx->writable_ssbos &= ~modified_bits; - ctx->writable_ssbos |= writable_bitmask << start_slot; + ctx->writable_ssbos[p_stage] &= ~modified_bits; + ctx->writable_ssbos[p_stage] |= writable_bitmask << start_slot; for (unsigned i = 0; i < count; i++) { struct pipe_shader_buffer *ssbo = &ctx->ssbos[p_stage][start_slot + i]; diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h index 1c319144066..8ee09ca9079 100644 --- a/src/gallium/drivers/zink/zink_context.h +++ b/src/gallium/drivers/zink/zink_context.h @@ -107,7 +107,7 @@ struct zink_context { struct pipe_constant_buffer ubos[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS]; struct pipe_shader_buffer ssbos[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_BUFFERS]; - uint32_t writable_ssbos; + uint32_t writable_ssbos[PIPE_SHADER_TYPES]; struct zink_image_view image_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_IMAGES]; struct pipe_framebuffer_state fb_state; diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index bb5b8d5a968..dd30f09da8d 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -370,7 +370,7 @@ zink_draw_vbo(struct pipe_context *pctx, assert(ctx->ssbos[i][index].buffer_size <= screen->info.props.limits.maxStorageBufferRange); assert(ctx->ssbos[i][index].buffer); struct zink_resource *res = zink_resource(ctx->ssbos[i][index].buffer); - if (ctx->writable_ssbos & (1 << index)) + if (ctx->writable_ssbos[i] & (1 << index)) write_desc_resources[num_wds] = res; else read_desc_resources[num_wds] = res;