From dfe9bfef9b9cfb8d27556843db87a2c03d1490e4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 22 Mar 2021 15:45:37 -0400 Subject: [PATCH] lavapipe: fix array texture region copies these need to use different struct members for copying array textures the buffer2image variants are already doing the right thing Fixes: b38879f8c5f ("vallium: initial import of the vulkan frontend") Reviewed-by: Dave Airlie Part-of: --- src/gallium/frontends/lavapipe/lvp_execute.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index b3285fe4dc3..cbfc5b2de0d 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -1946,16 +1946,24 @@ static void handle_copy_image(struct lvp_cmd_buffer_entry *cmd, struct pipe_box src_box; src_box.x = copycmd->regions[i].srcOffset.x; src_box.y = copycmd->regions[i].srcOffset.y; - src_box.z = copycmd->regions[i].srcOffset.z + copycmd->regions[i].srcSubresource.baseArrayLayer; src_box.width = copycmd->regions[i].extent.width; src_box.height = copycmd->regions[i].extent.height; - src_box.depth = copycmd->regions[i].extent.depth; + if (copycmd->src->bo->target == PIPE_TEXTURE_3D) { + src_box.depth = copycmd->regions[i].extent.depth; + src_box.z = copycmd->regions[i].srcOffset.z; + } else { + src_box.depth = copycmd->regions[i].srcSubresource.layerCount; + src_box.z = copycmd->regions[i].srcSubresource.baseArrayLayer; + } + unsigned dstz = copycmd->dst->bo->target == PIPE_TEXTURE_3D ? + copycmd->regions[i].dstOffset.z : + copycmd->regions[i].dstSubresource.baseArrayLayer; state->pctx->resource_copy_region(state->pctx, copycmd->dst->bo, copycmd->regions[i].dstSubresource.mipLevel, copycmd->regions[i].dstOffset.x, copycmd->regions[i].dstOffset.y, - copycmd->regions[i].dstOffset.z + copycmd->regions[i].dstSubresource.baseArrayLayer, + dstz, copycmd->src->bo, copycmd->regions[i].srcSubresource.mipLevel, &src_box);