Mesa (staging/22.1): zink: fix xfb counter buffer barriers
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Apr 21 04:10:01 UTC 2022
Module: Mesa
Branch: staging/22.1
Commit: b0f8a1a92341e3c4f08064253c780b5bf4afb41c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0f8a1a92341e3c4f08064253c780b5bf4afb41c
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Wed Apr 20 11:46:36 2022 -0400
zink: fix xfb counter buffer barriers
a read barrier is needed for resume, yes, but the counter buffer
is always being written to, so write access must always be set
cc: mesa-stable
fixes (nv):
KHR-GL46.transform_feedback.draw_xfb_test
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16065>
(cherry picked from commit fc5edf9b68159288baa22c055e471de958812312)
Conflicts:
src/gallium/drivers/zink/ci/zink-nv-fails.txt
---
.pick_status.json | 2 +-
src/gallium/drivers/zink/ci/zink-nv-fails.txt | 1 -
src/gallium/drivers/zink/zink_draw.cpp | 29 ++++++++++++++-------------
3 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index 0999d756c88..1ae93364b85 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -13,7 +13,7 @@
"description": "zink: fix xfb counter buffer barriers",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": null
},
diff --git a/src/gallium/drivers/zink/ci/zink-nv-fails.txt b/src/gallium/drivers/zink/ci/zink-nv-fails.txt
index 604b170e585..8893e4bc8c0 100644
--- a/src/gallium/drivers/zink/ci/zink-nv-fails.txt
+++ b/src/gallium/drivers/zink/ci/zink-nv-fails.txt
@@ -149,7 +149,6 @@ KHR-GL46.texture_view.view_sampling,Fail
KHR-GL46.transform_feedback.capture_geometry_interleaved_test,Fail
KHR-GL46.transform_feedback.capture_geometry_separate_test,Fail
KHR-GL46.transform_feedback.capture_vertex_separate_test,Fail
-KHR-GL46.transform_feedback.draw_xfb_test,Fail
KHR-GL46.transform_feedback.query_geometry_interleaved_test,Fail
KHR-GL46.transform_feedback.query_geometry_separate_test,Fail
KHR-GL46.transform_feedback.query_vertex_interleaved_test,Fail
diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp
index fb385a6d390..1144ee5c790 100644
--- a/src/gallium/drivers/zink/zink_draw.cpp
+++ b/src/gallium/drivers/zink/zink_draw.cpp
@@ -20,25 +20,26 @@
static void
zink_emit_xfb_counter_barrier(struct zink_context *ctx)
{
- /* Between the pause and resume there needs to be a memory barrier for the counter buffers
- * with a source access of VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
- * at pipeline stage VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- * to a destination access of VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
- * at pipeline stage VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT.
- *
- * - from VK_EXT_transform_feedback spec
- */
for (unsigned i = 0; i < ctx->num_so_targets; i++) {
struct zink_so_target *t = zink_so_target(ctx->so_targets[i]);
if (!t)
continue;
struct zink_resource *res = zink_resource(t->counter_buffer);
- if (t->counter_buffer_valid)
- zink_resource_buffer_barrier(ctx, res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
- VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT);
- else
- zink_resource_buffer_barrier(ctx, res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
- VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT);
+ VkAccessFlags access = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT;
+ VkPipelineStageFlags stage = VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT;
+ if (t->counter_buffer_valid) {
+ /* Between the pause and resume there needs to be a memory barrier for the counter buffers
+ * with a source access of VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
+ * at pipeline stage VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
+ * to a destination access of VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
+ * at pipeline stage VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT.
+ *
+ * - from VK_EXT_transform_feedback spec
+ */
+ access |= VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT;
+ stage |= VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
+ }
+ zink_resource_buffer_barrier(ctx, res, access, stage);
}
ctx->xfb_barrier = false;
}
More information about the mesa-commit
mailing list