From 18d206d67ca485ef2f8b17ea1c0e0c08b63d3562 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Fri, 7 Mar 2025 15:54:26 -0600 Subject: [PATCH] zink: Check queue families when binding image resources We check for iamge layouts and feedback loops when we bind image resources but not queue families. If the resource isn't on the graphics queue, we need to add it to need_barriers so we can transition it back to our queue. Fixes: d4f8ad27f2d7 ("zink: handle implicit sync for dmabufs") Reviewed-by: Mike Blumenkrantz Part-of: --- src/gallium/drivers/zink/zink_context.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 45d97877676..c32ccdb6f97 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -1853,6 +1853,9 @@ check_for_layout_update(struct zink_context *ctx, struct zink_resource *res, boo if (!is_compute && res->fb_binds && !(ctx->feedback_loops & res->fb_binds)) { /* always double check feedback loops */ ret = !!_mesa_set_add(ctx->need_barriers[0], res); + } else if (res->queue != zink_screen(ctx->base.screen)->gfx_queue && res->queue != VK_QUEUE_FAMILY_IGNORED) { + /* Check if we need a queue family transfer */ + ret = !!_mesa_set_add(ctx->need_barriers[0], res); } else { if (res->bind_count[is_compute] && layout && res->layout != layout) ret = !!_mesa_set_add(ctx->need_barriers[is_compute], res);