zink: expand ZINK_DEBUG=sync to cover copy ops
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 1 Mar 2023 20:20:27 +0000 (15:20 -0500)
committerMarge Bot <emma+marge@anholt.net>
Sat, 18 Mar 2023 11:44:38 +0000 (11:44 +0000)
useful for debugging

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21999>

src/gallium/drivers/zink/zink_context.c

index 286fb54..925f6dc 100644 (file)
@@ -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, &region);
    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),