[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