zink: be more explicit about blit layer/depth usage

same as for resource copying, ensure that it's very clear we're abiding
by vk spec for array vs 3d usage

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9969>
This commit is contained in:
Mike Blumenkrantz 2021-03-31 15:31:30 -04:00 committed by Marge Bot
parent d5b56debde
commit 83bee837e5

View file

@ -138,16 +138,30 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info)
region.srcOffsets[1].x = info->src.box.x + info->src.box.width; region.srcOffsets[1].x = info->src.box.x + info->src.box.width;
region.srcOffsets[1].y = info->src.box.y + info->src.box.height; region.srcOffsets[1].y = info->src.box.y + info->src.box.height;
if (src->base.b.array_size > 1) { switch (src->base.b.target) {
case PIPE_TEXTURE_CUBE:
case PIPE_TEXTURE_CUBE_ARRAY:
case PIPE_TEXTURE_2D_ARRAY:
case PIPE_TEXTURE_1D_ARRAY:
/* these use layer */
region.srcSubresource.baseArrayLayer = info->src.box.z;
region.srcSubresource.layerCount = info->src.box.z + info->src.box.depth;
region.srcOffsets[0].z = 0; region.srcOffsets[0].z = 0;
region.srcOffsets[1].z = 1; region.srcOffsets[1].z = 1;
region.srcSubresource.baseArrayLayer = info->src.box.z; break;
region.srcSubresource.layerCount = info->src.box.depth; case PIPE_TEXTURE_3D:
} else { /* this uses depth */
region.srcOffsets[0].z = info->src.box.z;
region.srcOffsets[1].z = info->src.box.z + info->src.box.depth;
region.srcSubresource.baseArrayLayer = 0; region.srcSubresource.baseArrayLayer = 0;
region.srcSubresource.layerCount = 1; region.srcSubresource.layerCount = 1;
region.srcOffsets[0].z = info->src.box.z;
region.srcOffsets[1].z = info->src.box.z + info->src.box.depth;
break;
default:
/* these must only copy one layer */
region.srcSubresource.baseArrayLayer = 0;
region.srcSubresource.layerCount = 1;
region.srcOffsets[0].z = 0;
region.srcOffsets[1].z = 1;
} }
region.dstSubresource.aspectMask = dst->aspect; region.dstSubresource.aspectMask = dst->aspect;
@ -157,16 +171,30 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info)
region.dstOffsets[1].x = info->dst.box.x + info->dst.box.width; region.dstOffsets[1].x = info->dst.box.x + info->dst.box.width;
region.dstOffsets[1].y = info->dst.box.y + info->dst.box.height; region.dstOffsets[1].y = info->dst.box.y + info->dst.box.height;
if (dst->base.b.array_size > 1) { switch (dst->base.b.target) {
case PIPE_TEXTURE_CUBE:
case PIPE_TEXTURE_CUBE_ARRAY:
case PIPE_TEXTURE_2D_ARRAY:
case PIPE_TEXTURE_1D_ARRAY:
/* these use layer */
region.dstSubresource.baseArrayLayer = info->dst.box.z;
region.dstSubresource.layerCount = info->dst.box.z + info->dst.box.depth;
region.dstOffsets[0].z = 0; region.dstOffsets[0].z = 0;
region.dstOffsets[1].z = 1; region.dstOffsets[1].z = 1;
region.dstSubresource.baseArrayLayer = info->dst.box.z; break;
region.dstSubresource.layerCount = info->dst.box.depth; case PIPE_TEXTURE_3D:
} else { /* this uses depth */
region.dstOffsets[0].z = info->dst.box.z;
region.dstOffsets[1].z = info->dst.box.z + info->dst.box.depth;
region.dstSubresource.baseArrayLayer = 0; region.dstSubresource.baseArrayLayer = 0;
region.dstSubresource.layerCount = 1; region.dstSubresource.layerCount = 1;
region.dstOffsets[0].z = info->dst.box.z;
region.dstOffsets[1].z = info->dst.box.z + info->dst.box.depth;
break;
default:
/* these must only copy one layer */
region.dstSubresource.baseArrayLayer = 0;
region.dstSubresource.layerCount = 1;
region.dstOffsets[0].z = 0;
region.dstOffsets[1].z = 1;
} }
vkCmdBlitImage(batch->state->cmdbuf, src->obj->image, src->layout, vkCmdBlitImage(batch->state->cmdbuf, src->obj->image, src->layout,