zink: disable msrtss handling when blitting

this avoids weirdness when e.g., flushing clears

cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37767>
This commit is contained in:
Mike Blumenkrantz 2025-10-07 17:28:42 -04:00
parent 0ab8878a6e
commit 5080f2b6f5

View file

@ -3072,7 +3072,7 @@ begin_rendering(struct zink_context *ctx, bool check_msaa_expand)
else
ctx->dynamic_fb.attachments[i].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
}
if (ctx->dynamic_fb.attachments[i].loadOp == VK_ATTACHMENT_LOAD_OP_LOAD)
if (!ctx->blitting && ctx->dynamic_fb.attachments[i].loadOp == VK_ATTACHMENT_LOAD_OP_LOAD)
msaa_expand_mask |= BITFIELD_BIT(i);
}
@ -3234,7 +3234,7 @@ begin_rendering(struct zink_context *ctx, bool check_msaa_expand)
if (prep_fb_attachment(ctx, res, i))
/* swapchain acquire can change this surface */
iv = zink_create_fb_surface(&ctx->base, &ctx->fb_state.cbufs[i])->image_view;
if (ctx->fb_state.cbufs[i].nr_samples && !has_msrtss) {
if (ctx->fb_state.cbufs[i].nr_samples && !has_msrtss && !ctx->blitting) {
ctx->dynamic_fb.attachments[i].resolveMode = VK_RESOLVE_MODE_AVERAGE_BIT;
ctx->dynamic_fb.attachments[i].resolveImageView = iv;
ctx->dynamic_fb.attachments[i].resolveImageLayout = res->layout;
@ -3279,7 +3279,7 @@ begin_rendering(struct zink_context *ctx, bool check_msaa_expand)
struct zink_resource *res = zink_resource(ctx->fb_state.zsbuf.texture);
prep_fb_attachment(ctx, res, ctx->fb_state.nr_cbufs);
VkImageView iv = zink_create_fb_surface(&ctx->base, &ctx->fb_state.zsbuf)->image_view;
if (ctx->fb_state.zsbuf.nr_samples && !has_msrtss) {
if (ctx->fb_state.zsbuf.nr_samples && !has_msrtss && !ctx->blitting) {
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS].resolveImageView = iv;
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS].resolveImageLayout = res->layout;
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS+1].resolveImageView = iv;
@ -3298,7 +3298,7 @@ begin_rendering(struct zink_context *ctx, bool check_msaa_expand)
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS+1].imageView = iv;
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS+1].imageLayout = res->layout;
assert(ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS+1].imageLayout != VK_IMAGE_LAYOUT_UNDEFINED);
if (ctx->transient_attachments & BITFIELD_BIT(PIPE_MAX_COLOR_BUFS)) {
if (ctx->transient_attachments & BITFIELD_BIT(PIPE_MAX_COLOR_BUFS) && !ctx->blitting) {
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS].resolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT;
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS + 1].resolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT;
} else {
@ -3369,7 +3369,7 @@ begin_rendering(struct zink_context *ctx, bool check_msaa_expand)
ctx->gfx_pipeline_state.rast_samples + 1,
};
if (has_msrtss)
if (has_msrtss && !ctx->blitting)
ctx->dynamic_fb.info.pNext = ctx->transient_attachments ? &msrtss : NULL;
VKCTX(CmdBeginRendering)(ctx->bs->cmdbuf, &ctx->dynamic_fb.info);
ctx->in_rp = true;