zink: use VkSubresourceLayout::depthPitch as layer_stride when mapping 3D imgs
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 31 Mar 2021 19:35:11 +0000 (15:35 -0400)
committerMarge Bot <eric+marge@anholt.net>
Thu, 1 Apr 2021 13:43:22 +0000 (13:43 +0000)
this is not only more correct according to vk spec, it avoids having a 0-sized
layer_stride, which totally breaks the transfer map

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9969>

src/gallium/drivers/zink/zink_resource.c

index c7f19ca..2705676 100644 (file)
@@ -990,7 +990,10 @@ zink_transfer_map(struct pipe_context *pctx,
          VkSubresourceLayout srl;
          vkGetImageSubresourceLayout(screen->dev, res->obj->image, &isr, &srl);
          trans->base.b.stride = srl.rowPitch;
-         trans->base.b.layer_stride = srl.arrayPitch;
+         if (res->base.b.target == PIPE_TEXTURE_3D)
+            trans->base.b.layer_stride = srl.depthPitch;
+         else
+            trans->base.b.layer_stride = srl.arrayPitch;
          trans->offset = srl.offset;
          trans->depthPitch = srl.depthPitch;
          const struct util_format_description *desc = util_format_description(res->base.b.format);