diff --git a/.pick_status.json b/.pick_status.json index 785006a6b03..ba8ece6a800 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -7584,7 +7584,7 @@ "description": "zink: toggle ctx->has_swapchain when flushing clears", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "b122c3eaa9eff5c5c778d7dd7e06614b21a8c55b", "notes": null diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 9eea8c2482a..9adda460ee2 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -3380,11 +3380,14 @@ zink_flush_clears(struct zink_context *ctx) struct zink_screen *screen = zink_screen(ctx->base.screen); bool general_layout = screen->driver_workarounds.general_layout; bool queries_disabled = ctx->queries_disabled; + bool has_swapchain = ctx->has_swapchain; bool blitting = ctx->blitting; struct pipe_framebuffer_state fb = ctx->fb_state; if (!blitting) { for (unsigned i = 0; i < ctx->fb_state.nr_cbufs; i++) { if (!ctx->fb_state.cbufs[i].texture || !zink_fb_clear_enabled(ctx, i)) { + if (ctx->fb_state.cbufs[i].texture && zink_is_swapchain(zink_resource(ctx->fb_state.cbufs[i].texture))) + ctx->has_swapchain = false; ctx->fb_state.cbufs[i].texture = NULL; continue; } @@ -3418,6 +3421,7 @@ zink_flush_clears(struct zink_context *ctx) zink_batch_rp(ctx); ctx->queries_disabled = queries_disabled; ctx->blitting = blitting; + ctx->has_swapchain = has_swapchain; if (!blitting) ctx->fb_state = fb; }