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) {