anv/image: Rework our handling of 3-D image array ranges
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 19 Sep 2016 22:14:56 +0000 (15:14 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 14 Oct 2016 22:39:41 +0000 (15:39 -0700)
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/vulkan/anv_image.c

index f125aa65b0af48ea737b0daa2932e1ec2a348a41..c40768405fac30b38b28ad84c627d76779d6d0b4 100644 (file)
@@ -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,