diff --git a/src/gallium/drivers/zink/zink_clear.h b/src/gallium/drivers/zink/zink_clear.h index aa66fbe6eb1..05fb115b84a 100644 --- a/src/gallium/drivers/zink/zink_clear.h +++ b/src/gallium/drivers/zink/zink_clear.h @@ -89,6 +89,13 @@ zink_fb_clear_element_needs_explicit(struct zink_framebuffer_clear_data *clear) return clear->has_scissor || clear->conditional; } +static inline bool +zink_fb_clear_full_exists(struct zink_context *ctx, unsigned clear_buffer) +{ + struct zink_framebuffer_clear *fb_clear = &ctx->fb_clears[clear_buffer]; + return zink_fb_clear_count(fb_clear) && !zink_fb_clear_first_needs_explicit(fb_clear); +} + void zink_clear_apply_conditionals(struct zink_context *ctx); diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index df277b91acb..7240cdbcc72 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -2929,7 +2929,7 @@ zink_set_framebuffer_state(struct pipe_context *pctx, } res->fb_binds++; if (util_format_has_alpha1(psurf->format)) { - if (!res->valid) + if (!res->valid && !zink_fb_clear_full_exists(ctx, i)) ctx->void_clears |= (PIPE_CLEAR_COLOR0 << i); } }