[Mesa-dev] [PATCH 13/22] anv/image: Rework our handling of 3-D image array ranges

Jason Ekstrand jason at jlekstrand.net
Sat Oct 8 04:41:11 UTC 2016


Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
---
 src/intel/vulkan/anv_image.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index f125aa6..c407684 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -512,6 +512,18 @@ anv_image_view_init(struct anv_image_view *iview,
       .depth  = anv_minify(image->extent.depth , range->baseMipLevel),
    };
 
+   if (image->type == VK_IMAGE_TYPE_3D &&
+       usage_mask != VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {
+      /* Meta renders to 3D texture slices.  When it does so, it passes
+       * usage_mask == VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT.  Since meta is the
+       * only thing that uses a non-zero usage_mask, this lets us easily
+       * detect the one case where we actually want an array range used for
+       * 3-D textures.
+       */
+      isl_view.base_array_layer = 0;
+      isl_view.array_len = iview->extent.depth;
+   }
+
    isl_surf_usage_flags_t cube_usage;
    if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_CUBE ||
        pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) {
@@ -572,10 +584,6 @@ anv_image_view_init(struct anv_image_view *iview,
          isl_view.usage = cube_usage | ISL_SURF_USAGE_STORAGE_BIT;
          isl_view.format = isl_lower_storage_image_format(&device->info,
                                                           isl_view.format);
-         if (image->type == VK_IMAGE_TYPE_3D) {
-            isl_view.base_array_layer = 0;
-            isl_view.array_len = iview->extent.depth;
-         }
          isl_surf_fill_state(&device->isl_dev,
                              iview->storage_surface_state.map,
                              .surf = &surface->isl,
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list