From cb0fe8bef3dda38a5da9bbef54415c9beb93b34d Mon Sep 17 00:00:00 2001 From: Ramon Steenson <114740458+ramon-juicelabs@users.noreply.github.com> Date: Tue, 2 Dec 2025 23:38:21 +1300 Subject: [PATCH] Clamp blit if swapchain dst resized during acquisition --- src/gallium/drivers/zink/zink_blit.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c index 94845587fa5e..5a7be238cc03 100644 --- a/src/gallium/drivers/zink/zink_blit.c +++ b/src/gallium/drivers/zink/zink_blit.c @@ -286,15 +286,17 @@ zink_blit(struct pipe_context *pctx, struct zink_resource *src = zink_resource(info->src.resource); struct zink_resource *dst = zink_resource(info->dst.resource); + struct pipe_blit_info info_copy = *info; bool needs_present_readback = false; if (zink_is_swapchain(dst)) { - VkExtent2D swapchain_size = ctx->swapchain_size; if (!zink_kopper_acquire(ctx, dst, UINT64_MAX)) return; - if (swapchain_size.width != ctx->swapchain_size.width || - swapchain_size.height != ctx->swapchain_size.height) { - return; - } + /* Clamp blit if extents exceed swapchain size because of a resize */ + if (info->dst.box.x + info->dst.box.width > dst->base.b.width0) + info_copy.dst.box.width = dst->base.b.width0 - info->dst.box.x; + if (info->dst.box.y + info->dst.box.height > dst->base.b.height0) + info_copy.dst.box.height = dst->base.b.height0 - info->dst.box.y; + info = &info_copy; } if (src_desc == dst_desc ||