Module: Mesa
Branch: main
Commit: 21a79acaa7e4d1d7e1f2f208aa00dbf92b84c478
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=21a79acaa7e4d1d7e1f2f208aa00dbf92b84c478

Author: Dave Airlie <[email protected]>
Date:   Fri Oct  6 10:49:29 2023 +1000

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 <[email protected]>
Reviewed-by: Roland Scheidegger <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25609>

---

 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;

Reply via email to