zink: ignore unacquired swapchain images during end-of-frame flush
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 18 Oct 2023 12:15:18 +0000 (08:15 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 18 Oct 2023 13:51:57 +0000 (13:51 +0000)
> Use of a presentable image must: occur only after the image is returned by flink:vkAcquireNextImageKHR, and before it is released by flink:vkQueuePresentKHR.
> This includes transitioning the image layout and rendering commands.

fixes #10005

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

src/gallium/drivers/zink/zink_context.c

index e83b94875e09d14269e4316a5dd139d110fb09ea..ca228da24cf3b6bac7b519c44721c8bb8253cfd3 100644 (file)
@@ -3776,7 +3776,7 @@ zink_flush(struct pipe_context *pctx,
 #ifdef HAVE_RENDERDOC_APP_H
       p_atomic_inc(&screen->renderdoc_frame);
 #endif
-      if (ctx->needs_present && ctx->needs_present->obj->image &&
+      if (ctx->needs_present && ctx->needs_present->obj->dt_idx != UINT32_MAX &&
           zink_is_swapchain(ctx->needs_present)) {
          zink_kopper_readback_update(ctx, ctx->needs_present);
          screen->image_barrier(ctx, ctx->needs_present, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT);