From b022cdc8a1c3534d6f57f53b876e30b10e339432 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 8 Jul 2025 12:40:02 -0400 Subject: [PATCH] zink: only copy resource during add_bind if it is valid this otherwise is a big no-op Part-of: --- src/gallium/drivers/zink/zink_resource.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 70e728952c8..abdb7a34a41 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1772,13 +1772,15 @@ add_resource_bind(struct zink_context *ctx, struct zink_resource *res, unsigned res->layout = VK_IMAGE_LAYOUT_UNDEFINED; res->obj = new_obj; res->queue = VK_QUEUE_FAMILY_IGNORED; - for (unsigned i = 0; i <= res->base.b.last_level; i++) { - struct pipe_box box; - u_box_3d(0, 0, 0, - u_minify(res->base.b.width0, i), - u_minify(res->base.b.height0, i), res->base.b.array_size, &box); - box.depth = util_num_layers(&res->base.b, i); - ctx->base.resource_copy_region(&ctx->base, &res->base.b, i, 0, 0, 0, &staging.base.b, i, &box); + if (res->valid) { + for (unsigned i = 0; i <= res->base.b.last_level; i++) { + struct pipe_box box; + u_box_3d(0, 0, 0, + u_minify(res->base.b.width0, i), + u_minify(res->base.b.height0, i), res->base.b.array_size, &box); + box.depth = util_num_layers(&res->base.b, i); + ctx->base.resource_copy_region(&ctx->base, &res->base.b, i, 0, 0, 0, &staging.base.b, i, &box); + } } res->rebind_count++; if (old_obj->exportable) {