From 127d7aeb6c2fe543d348c72a3c9e9414ed6fa402 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 6 Apr 2022 16:49:03 -0400 Subject: [PATCH] zink: handle deferred swapchain resource flushing if the swapchain image hasn't been acquired yet, flag it as a deferred present so it can be picked up on flush Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_context.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index afdc7ac..bfce532 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -3544,9 +3544,13 @@ zink_flush_resource(struct pipe_context *pctx, { struct zink_context *ctx = zink_context(pctx); struct zink_resource *res = zink_resource(pres); - if (pres->bind & PIPE_BIND_DISPLAY_TARGET && res->obj->acquire) { - zink_resource_image_barrier(ctx, res, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT); - zink_batch_reference_resource_rw(&ctx->batch, res, true); + if (pres->bind & PIPE_BIND_DISPLAY_TARGET) { + if (res->obj->acquire) { + zink_resource_image_barrier(ctx, res, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT); + zink_batch_reference_resource_rw(&ctx->batch, res, true); + } else { + ctx->needs_present = res; + } ctx->batch.swapchain = res; } } -- 2.7.4