diff --git a/.pick_status.json b/.pick_status.json index 801af3d1dce..64b166a542a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -121,7 +121,7 @@ "description": "zink: skip msrtss replicate if the attachment will be full-cleared", "nominated": false, "nomination_type": null, - "resolution": 4, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/zink_render_pass.c b/src/gallium/drivers/zink/zink_render_pass.c index a2945b618d8..7a503ec2462 100644 --- a/src/gallium/drivers/zink/zink_render_pass.c +++ b/src/gallium/drivers/zink/zink_render_pass.c @@ -774,6 +774,11 @@ zink_begin_render_pass(struct zink_context *ctx) u_foreach_bit(i, ctx->framebuffer->rp->state.msaa_expand_mask) { struct zink_ctx_surface *csurf = (struct zink_ctx_surface*)ctx->fb_state.cbufs[i]; + /* skip replicate blit if the image will be full-cleared */ + if ((i == PIPE_MAX_COLOR_BUFS && (ctx->rp_clears_enabled & PIPE_CLEAR_DEPTHSTENCIL)) || + (ctx->rp_clears_enabled >> 2) & BITFIELD_BIT(i)) { + csurf->transient_init |= zink_fb_clear_full_exists(ctx, i); + } if (csurf->transient_init) continue; struct pipe_surface *dst_view = (struct pipe_surface*)csurf->transient;