From 9ed6487ba024391dc410202be3427674f5b5c0ab Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 1 Mar 2023 15:20:27 -0500 Subject: [PATCH] zink: expand ZINK_DEBUG=sync to cover copy ops useful for debugging Part-of: --- src/gallium/drivers/zink/zink_context.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 286fb54..925f6dc 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -4715,6 +4715,17 @@ zink_copy_buffer(struct zink_context *ctx, struct zink_resource *dst, struct zin ctx->batch.state->has_barriers |= can_unorder; zink_batch_reference_resource_rw(batch, src, false); zink_batch_reference_resource_rw(batch, dst, true); + if (unlikely(zink_debug & ZINK_DEBUG_SYNC)) { + 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; + VKCTX(CmdPipelineBarrier)(cmdbuf, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + 0, 1, &mb, 0, NULL, 0, NULL); + } bool marker = zink_cmd_debug_marker_begin(ctx, cmdbuf, "copy_buffer(%d)", size); VKCTX(CmdCopyBuffer)(cmdbuf, src->obj->buffer, dst->obj->buffer, 1, ®ion); zink_cmd_debug_marker_end(ctx, cmdbuf, marker); @@ -4810,6 +4821,17 @@ zink_copy_image_buffer(struct zink_context *ctx, struct zink_resource *dst, stru } if (!aspects) aspects = img->aspect; + if (unlikely(zink_debug & ZINK_DEBUG_SYNC)) { + 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; + VKCTX(CmdPipelineBarrier)(cmdbuf, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + 0, 1, &mb, 0, NULL, 0, NULL); + } while (aspects) { int aspect = 1 << u_bit_scan(&aspects); region.imageSubresource.aspectMask = aspect; @@ -4949,6 +4971,17 @@ zink_resource_copy_region(struct pipe_context *pctx, zink_batch_reference_resource_rw(batch, src, false); zink_batch_reference_resource_rw(batch, dst, true); + if (unlikely(zink_debug & ZINK_DEBUG_SYNC)) { + 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; + VKCTX(CmdPipelineBarrier)(cmdbuf, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, + 0, 1, &mb, 0, NULL, 0, NULL); + } bool marker = zink_cmd_debug_marker_begin(ctx, cmdbuf, "copy_image(%s->%s, %dx%dx%d)", util_format_short_name(psrc->format), util_format_short_name(pdst->format), -- 2.7.4