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);