Mesa (master): v3dv: fix base layer for 3D blits in the TFU path

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 30 12:27:45 UTC 2020


Module: Mesa
Branch: master
Commit: b3f212c52e278ced13a795fab8c05f2f65ce7c0a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b3f212c52e278ced13a795fab8c05f2f65ce7c0a

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Fri Nov 27 11:13:26 2020 +0100

v3dv: fix base layer for 3D blits in the TFU path

We were always using baseArrayLayer from the image subresource, but
for 3D images we should use the Z offset of the region.

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7809>

---

 src/broadcom/vulkan/v3dv_meta_copy.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c
index 63badcd873c..c9324bbd53c 100644
--- a/src/broadcom/vulkan/v3dv_meta_copy.c
+++ b/src/broadcom/vulkan/v3dv_meta_copy.c
@@ -4077,6 +4077,9 @@ blit_tfu(struct v3dv_cmd_buffer *cmd_buffer,
        */
       if (dst_mirror_z)
          return false;
+   } else {
+      min_dst_layer = region->dstSubresource.baseArrayLayer;
+      max_dst_layer = min_dst_layer + region->dstSubresource.layerCount - 1;
    }
 
    uint32_t min_src_layer;
@@ -4089,11 +4092,14 @@ blit_tfu(struct v3dv_cmd_buffer *cmd_buffer,
 
       if (src_mirror_z)
          return false;
-
-      if (max_dst_layer - min_dst_layer != max_src_layer - min_src_layer)
-         return false;
+   } else {
+      min_src_layer = region->srcSubresource.baseArrayLayer;
+      max_src_layer = min_src_layer + region->srcSubresource.layerCount - 1;
    }
 
+   if (max_dst_layer - min_dst_layer != max_src_layer - min_src_layer)
+      return false;
+
    const uint32_t layer_count = dst->type != VK_IMAGE_TYPE_3D ?
       region->dstSubresource.layerCount :
       max_dst_layer - min_dst_layer;
@@ -4101,8 +4107,8 @@ blit_tfu(struct v3dv_cmd_buffer *cmd_buffer,
 
    for (uint32_t i = 0; i < layer_count; i++) {
       emit_tfu_job(cmd_buffer,
-                   dst, dst_mip_level, region->dstSubresource.baseArrayLayer + i,
-                   src, src_mip_level, region->srcSubresource.baseArrayLayer + i,
+                   dst, dst_mip_level, min_dst_layer + i,
+                   src, src_mip_level, min_src_layer + i,
                    dst_width, dst_height, dst->format);
    }
 



More information about the mesa-commit mailing list