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