vulkan.h: V118 -- Add array types to VkImageViewType
diff --git a/icd/intel/cmd_meta.c b/icd/intel/cmd_meta.c
index a60daae..7c7ee8e 100644
--- a/icd/intel/cmd_meta.c
+++ b/icd/intel/cmd_meta.c
@@ -128,18 +128,31 @@
info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
info.image = (VkImage) img;
- switch (img->type) {
- case VK_IMAGE_TYPE_1D:
- info.viewType = VK_IMAGE_VIEW_TYPE_1D;
- break;
- case VK_IMAGE_TYPE_2D:
- info.viewType = VK_IMAGE_VIEW_TYPE_2D;
- break;
- case VK_IMAGE_TYPE_3D:
- info.viewType = VK_IMAGE_VIEW_TYPE_3D;
- break;
- default:
- break;
+ if (img->array_size == 1) {
+ switch (img->type) {
+ case VK_IMAGE_TYPE_1D:
+ info.viewType = VK_IMAGE_VIEW_TYPE_1D;
+ break;
+ case VK_IMAGE_TYPE_2D:
+ info.viewType = VK_IMAGE_VIEW_TYPE_2D;
+ break;
+ default:
+ break;
+ }
+ } else {
+ switch (img->type) {
+ case VK_IMAGE_TYPE_1D:
+ info.viewType = VK_IMAGE_VIEW_TYPE_1D_ARRAY;
+ break;
+ case VK_IMAGE_TYPE_2D:
+ info.viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
+ break;
+ case VK_IMAGE_TYPE_3D:
+ info.viewType = VK_IMAGE_VIEW_TYPE_3D;
+ break;
+ default:
+ break;
+ }
}
info.format = format;
diff --git a/icd/intel/view.c b/icd/intel/view.c
index 0827842..1133ae3 100644
--- a/icd/intel/view.c
+++ b/icd/intel/view.c
@@ -200,23 +200,34 @@
}
}
-static int img_type_to_view_type(VkImageType type)
+static int img_type_to_view_type(VkImageType type, unsigned first_layer, unsigned num_layers)
{
- switch (type) {
- case VK_IMAGE_TYPE_1D: return VK_IMAGE_VIEW_TYPE_1D;
- case VK_IMAGE_TYPE_2D: return VK_IMAGE_VIEW_TYPE_2D;
- case VK_IMAGE_TYPE_3D: return VK_IMAGE_VIEW_TYPE_3D;
- default: assert(!"unknown img type"); return VK_IMAGE_VIEW_TYPE_1D;
+ if (first_layer == 0 && num_layers == 1) {
+ switch (type) {
+ case VK_IMAGE_TYPE_1D: return VK_IMAGE_VIEW_TYPE_1D;
+ case VK_IMAGE_TYPE_2D: return VK_IMAGE_VIEW_TYPE_2D;
+ default: assert(!"unknown img type"); return VK_IMAGE_VIEW_TYPE_1D;
+ }
+ } else {
+ switch (type) {
+ case VK_IMAGE_TYPE_1D: return VK_IMAGE_VIEW_TYPE_1D_ARRAY;
+ case VK_IMAGE_TYPE_2D: return VK_IMAGE_VIEW_TYPE_2D_ARRAY;
+ case VK_IMAGE_TYPE_3D: return VK_IMAGE_VIEW_TYPE_3D;
+ default: assert(!"unknown img type"); return VK_IMAGE_VIEW_TYPE_1D_ARRAY;
+ }
}
}
static int view_type_to_surface_type(VkImageViewType type)
{
switch (type) {
- case VK_IMAGE_VIEW_TYPE_1D: return GEN6_SURFTYPE_1D;
- case VK_IMAGE_VIEW_TYPE_2D: return GEN6_SURFTYPE_2D;
- case VK_IMAGE_VIEW_TYPE_3D: return GEN6_SURFTYPE_3D;
- case VK_IMAGE_VIEW_TYPE_CUBE: return GEN6_SURFTYPE_CUBE;
+ case VK_IMAGE_VIEW_TYPE_1D: return GEN6_SURFTYPE_1D;
+ case VK_IMAGE_VIEW_TYPE_1D_ARRAY: return GEN6_SURFTYPE_1D;
+ case VK_IMAGE_VIEW_TYPE_2D: return GEN6_SURFTYPE_2D;
+ case VK_IMAGE_VIEW_TYPE_2D_ARRAY: return GEN6_SURFTYPE_2D;
+ case VK_IMAGE_VIEW_TYPE_3D: return GEN6_SURFTYPE_3D;
+ case VK_IMAGE_VIEW_TYPE_CUBE: return GEN6_SURFTYPE_CUBE;
+ case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: return GEN6_SURFTYPE_CUBE;
default: assert(!"unknown view type"); return GEN6_SURFTYPE_NULL;
}
}
@@ -765,7 +776,7 @@
memset(info, 0, sizeof(*info));
info->surface_type =
- view_type_to_surface_type(img_type_to_view_type(img->type));
+ view_type_to_surface_type(img_type_to_view_type(img->type, first_layer, num_layers));
if (info->surface_type == GEN6_SURFTYPE_CUBE) {
/*
@@ -1259,14 +1270,14 @@
if (intel_gpu_gen(dev->gpu) >= INTEL_GEN(7)) {
surface_state_tex_gen7(dev->gpu, img,
- img_type_to_view_type(img->type),
+ img_type_to_view_type(img->type, info->baseArraySlice, info->arraySize),
info->format, info->mipLevel, 1,
info->baseArraySlice, info->arraySize,
identity_channel_mapping, true, view->cmd);
view->cmd_len = 8;
} else {
surface_state_tex_gen6(dev->gpu, img,
- img_type_to_view_type(img->type),
+ img_type_to_view_type(img->type, info->baseArraySlice, info->arraySize),
info->format, info->mipLevel, 1,
info->baseArraySlice, info->arraySize,
true, view->cmd);
diff --git a/include/vulkan.h b/include/vulkan.h
index 8998cd0..6e7647c 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -33,7 +33,7 @@
#include "vk_platform.h"
// Vulkan API version supported by this file
-#define VK_API_VERSION VK_MAKE_VERSION(0, 116, 0)
+#define VK_API_VERSION VK_MAKE_VERSION(0, 118, 0)
#ifdef __cplusplus
extern "C"
@@ -192,8 +192,11 @@
VK_IMAGE_VIEW_TYPE_2D = 0x00000001,
VK_IMAGE_VIEW_TYPE_3D = 0x00000002,
VK_IMAGE_VIEW_TYPE_CUBE = 0x00000003,
+ VK_IMAGE_VIEW_TYPE_1D_ARRAY = 0x00000004,
+ VK_IMAGE_VIEW_TYPE_2D_ARRAY = 0x00000005,
+ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 0x00000006,
- VK_ENUM_RANGE(IMAGE_VIEW_TYPE, 1D, CUBE)
+ VK_ENUM_RANGE(IMAGE_VIEW_TYPE, 1D, CUBE_ARRAY)
} VkImageViewType;
typedef enum VkImageAspect_