Mesa (master): zink: flag ssbo buffer resources as having pending writes per stage

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 28 14:41:40 UTC 2021


Module: Mesa
Branch: master
Commit: bceb47d57b39863ddebabaaffeb3cfc276bb6e29
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bceb47d57b39863ddebabaaffeb3cfc276bb6e29

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue Jan 12 18:40:23 2021 -0500

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 <ajax at redhat.com>
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8628>

---

 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;



More information about the mesa-commit mailing list