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_