Mesa (main): zink: add ZINK_DEBUG=sync

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed May 18 03:02:15 UTC 2022


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Apr 20 12:19:52 2022 -0400

zink: add ZINK_DEBUG=sync

this is great for debugging

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16544>

---

 docs/drivers/zink.rst                  |  2 ++
 src/gallium/drivers/zink/zink_draw.cpp | 26 ++++++++++++++++++++++++++
 src/gallium/drivers/zink/zink_screen.c |  1 +
 src/gallium/drivers/zink/zink_screen.h |  1 +
 4 files changed, 30 insertions(+)

diff --git a/docs/drivers/zink.rst b/docs/drivers/zink.rst
index 2519840e748..0b3f9db1899 100644
--- a/docs/drivers/zink.rst
+++ b/docs/drivers/zink.rst
@@ -269,6 +269,8 @@ variable:
    Print the TGSI form of TGSI shaders to stderr.
 ``validation``
    Dump Validation layer output.
+``sync``
+   Emit full synchronization barriers before every draw and dispatch.
 
 Vulkan Validation Layers
 ^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp
index 1db2c237283..4aebcbe667e 100644
--- a/src/gallium/drivers/zink/zink_draw.cpp
+++ b/src/gallium/drivers/zink/zink_draw.cpp
@@ -542,6 +542,19 @@ zink_draw(struct pipe_context *pctx,
 
    zink_query_update_gs_states(ctx, dinfo->was_line_loop);
 
+   if (unlikely(zink_debug & ZINK_DEBUG_SYNC)) {
+      zink_batch_no_rp(ctx);
+      VkMemoryBarrier mb;
+      mb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
+      mb.pNext = NULL;
+      mb.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
+      mb.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
+      VKSCR(CmdPipelineBarrier)(ctx->batch.state->cmdbuf,
+                                VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+                                VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+                                0, 1, &mb, 0, NULL, 0, NULL);
+   }
+
    zink_batch_rp(ctx);
    /* check dead swapchain */
    if (unlikely(!ctx->batch.in_rp))
@@ -931,6 +944,19 @@ zink_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info)
    if (ctx->memory_barrier)
       zink_flush_memory_barrier(ctx, true);
 
+   if (unlikely(zink_debug & ZINK_DEBUG_SYNC)) {
+      zink_batch_no_rp(ctx);
+      VkMemoryBarrier mb;
+      mb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
+      mb.pNext = NULL;
+      mb.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
+      mb.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
+      VKSCR(CmdPipelineBarrier)(ctx->batch.state->cmdbuf,
+                                VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+                                VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+                                0, 1, &mb, 0, NULL, 0, NULL);
+   }
+
    if (zink_program_has_descriptors(&ctx->curr_compute->base))
       screen->descriptors_update(ctx, true);
    if (ctx->di.any_bindless_dirty && ctx->curr_compute->base.dd->bindless)
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 864fd10a7b1..c40dcd14112 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -78,6 +78,7 @@ zink_debug_options[] = {
    { "spirv", ZINK_DEBUG_SPIRV, "Dump SPIR-V during program compile" },
    { "tgsi", ZINK_DEBUG_TGSI, "Dump TGSI during program compile" },
    { "validation", ZINK_DEBUG_VALIDATION, "Dump Validation layer output" },
+   { "sync", ZINK_DEBUG_SYNC, "Force synchronization before draws/dispatches" },
    DEBUG_NAMED_VALUE_END
 };
 
diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h
index 35240b2fd17..776b5c14a4b 100644
--- a/src/gallium/drivers/zink/zink_screen.h
+++ b/src/gallium/drivers/zink/zink_screen.h
@@ -66,6 +66,7 @@ enum zink_descriptor_type;
 #define ZINK_DEBUG_SPIRV 0x2
 #define ZINK_DEBUG_TGSI 0x4
 #define ZINK_DEBUG_VALIDATION 0x8
+#define ZINK_DEBUG_SYNC 0x10
 
 #define NUM_SLAB_ALLOCATORS 3
 #define MIN_SLAB_ORDER 8



More information about the mesa-commit mailing list