From 21a79acaa7e4d1d7e1f2f208aa00dbf92b84c478 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 6 Oct 2023 10:49:29 +1000 Subject: [PATCH] lavapipe: fix subresource layers asserts dEQP-VK.api.copy_and_blit.copy_commands2.blit_image.simple_tests.array.all_remaining_layers Fixes: 35c02f79c9b82b5 ("lavapipe: add some asserts for blit region extents") Reviewed-by: Erik Faye-Lund Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/frontends/lavapipe/lvp_execute.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 8e9da13716b..808419961f0 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -226,7 +226,9 @@ get_buffer_resource(struct pipe_context *ctx, void *mem) } ALWAYS_INLINE static void -assert_subresource_layers(const struct pipe_resource *pres, const VkImageSubresourceLayers *layers, const VkOffset3D *offsets) +assert_subresource_layers(const struct pipe_resource *pres, + const struct lvp_image *image, + const VkImageSubresourceLayers *layers, const VkOffset3D *offsets) { #ifndef NDEBUG if (pres->target == PIPE_TEXTURE_3D) { @@ -236,7 +238,7 @@ assert_subresource_layers(const struct pipe_resource *pres, const VkImageSubreso assert(offsets[1].z <= pres->depth0); } else { assert(layers->baseArrayLayer < pres->array_size); - assert(layers->baseArrayLayer + layers->layerCount <= pres->array_size); + assert(layers->baseArrayLayer + vk_image_subresource_layer_count(&image->vk, layers) <= pres->array_size); assert(offsets[0].z == 0); assert(offsets[1].z == 1); } @@ -2426,8 +2428,8 @@ static void handle_blit_image(struct vk_cmd_queue_entry *cmd, info.src.box.height = srcY0 - srcY1; } - assert_subresource_layers(info.src.resource, &blitcmd->pRegions[i].srcSubresource, blitcmd->pRegions[i].srcOffsets); - assert_subresource_layers(info.dst.resource, &blitcmd->pRegions[i].dstSubresource, blitcmd->pRegions[i].dstOffsets); + assert_subresource_layers(info.src.resource, src_image, &blitcmd->pRegions[i].srcSubresource, blitcmd->pRegions[i].srcOffsets); + assert_subresource_layers(info.dst.resource, dst_image, &blitcmd->pRegions[i].dstSubresource, blitcmd->pRegions[i].dstOffsets); if (src_image->bo->target == PIPE_TEXTURE_3D) { if (dstZ0 < dstZ1) { info.dst.box.z = dstZ0;