zink: explicitly disable reordering after restricted swapchain readback blits
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Mon, 15 May 2023 11:26:01 +0000 (07:26 -0400)
committerMarge Bot <emma+marge@anholt.net>
Mon, 22 May 2023 23:26:45 +0000 (23:26 +0000)
when needs_present_readback is set, reordering is disabled without hitting
the path that would normally disable promotion for the resource, so this
needs to be changed manually to avoid layout desync on the swapchain

cc: mesa-stable

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

src/gallium/drivers/zink/zink_blit.c
src/gallium/drivers/zink/zink_context.c

index d6c76cc..15e6be5 100644 (file)
@@ -459,8 +459,11 @@ zink_blit(struct pipe_context *pctx,
    }
    ctx->unordered_blitting = false;
 end:
-   if (needs_present_readback)
+   if (needs_present_readback) {
+      src->obj->unordered_read = false;
+      dst->obj->unordered_write = false;
       zink_kopper_present_readback(ctx, src);
+   }
 }
 
 /* similar to radeonsi */
index 7382674..5a2fcae 100644 (file)
@@ -4373,8 +4373,16 @@ zink_copy_image_buffer(struct zink_context *ctx, struct zink_resource *dst, stru
       }
       zink_cmd_debug_marker_end(ctx, cmdbuf, marker);
    }
-   if (needs_present_readback)
+   if (needs_present_readback) {
+      if (buf2img) {
+         img->obj->unordered_write = false;
+         buf->obj->unordered_read = false;
+      } else {
+         img->obj->unordered_read = false;
+         buf->obj->unordered_write = false;
+      }
       zink_kopper_present_readback(ctx, img);
+   }
 
    if (ctx->oom_flush && !ctx->batch.in_rp && !ctx->unordered_blitting)
       flush_batch(ctx, false);