Mesa (main): zink: don't short-circuit gfx stage finding during barrier generation
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jun 20 01:10:29 UTC 2022
Module: Mesa
Branch: main
Commit: f889bece4637928ae07d518fba3dd211de07d41e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f889bece4637928ae07d518fba3dd211de07d41e
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Sat Jun 18 09:48:51 2022 -0400
zink: don't short-circuit gfx stage finding during barrier generation
according to spec, all stages must be specified, not just the first one
Acked-by: Dave Airlie <airlied at redhat.com>
Reviewed-By: Tatsuyuki Ishi <ishitatsuyuki at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17111>
---
src/gallium/drivers/zink/zink_draw.cpp | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp
index a8cbd848d51..eca1b2a7d83 100644
--- a/src/gallium/drivers/zink/zink_draw.cpp
+++ b/src/gallium/drivers/zink/zink_draw.cpp
@@ -323,15 +323,29 @@ draw(struct zink_context *ctx,
}
}
+/*
+ If a synchronization command includes a source stage mask, its first synchronization scope only
+ includes execution of the pipeline stages specified in that mask, and its first access scope only
+ includes memory accesses performed by pipeline stages specified in that mask.
+
+ If a synchronization command includes a destination stage mask, its second synchronization scope
+ only includes execution of the pipeline stages specified in that mask, and its second access scope
+ only includes memory access performed by pipeline stages specified in that mask.
+
+ - Chapter 7. Synchronization and Cache Control
+
+ * thus, all stages must be added to ensure accurate synchronization
+ */
ALWAYS_INLINE static VkPipelineStageFlags
find_pipeline_bits(uint32_t *mask)
{
+ VkPipelineStageFlags pipeline = 0;
for (unsigned i = 0; i < ZINK_SHADER_COUNT; i++) {
if (mask[i]) {
- return zink_pipeline_flags_from_pipe_stage((enum pipe_shader_type)i);
+ pipeline |= zink_pipeline_flags_from_pipe_stage((enum pipe_shader_type)i);
}
}
- return 0;
+ return pipeline;
}
static void
More information about the mesa-commit
mailing list