From c60508ba3b5919c2ce5ab7b01a4ec50cef4770ed Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 15 May 2023 07:26:01 -0400 Subject: [PATCH] zink: explicitly disable reordering after restricted swapchain readback blits when needs_present_readback is set, reordering is disabled without hitting the path that would normally disable promotion for the resource, so this needs to be changed manually to avoid layout desync on the swapchain cc: mesa-stable Part-of: (cherry picked from commit 3c010319bbb4113612828bdf569ac83ca94c8c3f) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_blit.c | 5 ++++- src/gallium/drivers/zink/zink_context.c | 10 +++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 3f61408b9af..c9f395430c4 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -427,7 +427,7 @@ "description": "zink: explicitly disable reordering after restricted swapchain readback blits", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c index 3f87dff680d..bd611ee1ec1 100644 --- a/src/gallium/drivers/zink/zink_blit.c +++ b/src/gallium/drivers/zink/zink_blit.c @@ -452,8 +452,11 @@ zink_blit(struct pipe_context *pctx, } ctx->unordered_blitting = false; end: - if (needs_present_readback) + if (needs_present_readback) { + src->obj->unordered_read = false; + dst->obj->unordered_write = false; zink_kopper_present_readback(ctx, src); + } } /* similar to radeonsi */ diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 929c0bbe04e..5c93f9b2f29 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -4410,8 +4410,16 @@ zink_copy_image_buffer(struct zink_context *ctx, struct zink_resource *dst, stru } zink_cmd_debug_marker_end(ctx, cmdbuf, marker); } - if (needs_present_readback) + if (needs_present_readback) { + if (buf2img) { + img->obj->unordered_write = false; + buf->obj->unordered_read = false; + } else { + img->obj->unordered_read = false; + buf->obj->unordered_write = false; + } zink_kopper_present_readback(ctx, img); + } if (ctx->oom_flush && !ctx->batch.in_rp && !ctx->unordered_blitting) flush_batch(ctx, false);