Merge "Disable mutable_render_buffer.basic for ANGLE"
diff --git a/AndroidGen.bp b/AndroidGen.bp
index 0efb549..5c14e21 100644
--- a/AndroidGen.bp
+++ b/AndroidGen.bp
@@ -400,6 +400,7 @@
        "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmImageSamplerTests.cpp",
        "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIndexingTests.cpp",
        "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp",
+       "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.cpp",
        "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmLoopDepInfTests.cpp",
        "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmLoopDepLenTests.cpp",
        "external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmNonSemanticInfoTests.cpp",
diff --git a/android/cts/master/src/vk-master-2019-03-01.txt b/android/cts/master/src/vk-master-2019-03-01.txt
index 32232c8..3261b42 100644
--- a/android/cts/master/src/vk-master-2019-03-01.txt
+++ b/android/cts/master/src/vk-master-2019-03-01.txt
@@ -220386,7 +220386,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.iublimithigh.uab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.iublimithigh.uab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.iublimithigh.uab.vert.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.uab.comp.noia.0
@@ -359239,14 +359238,14 @@
 dEQP-VK.multiview.index.geometry_shader.5_10_5_10
 dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32
 dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count
-dEQP-VK.multiview.index.tesellation_shader.15
-dEQP-VK.multiview.index.tesellation_shader.8
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8
-dEQP-VK.multiview.index.tesellation_shader.15_15_15_15
-dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
-dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.index.tessellation_shader.15
+dEQP-VK.multiview.index.tessellation_shader.8
+dEQP-VK.multiview.index.tessellation_shader.1_2_4_8
+dEQP-VK.multiview.index.tessellation_shader.15_15_15_15
+dEQP-VK.multiview.index.tessellation_shader.8_1_1_8
+dEQP-VK.multiview.index.tessellation_shader.5_10_5_10
+dEQP-VK.multiview.index.tessellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.tessellation_shader.max_multi_view_view_count
 dEQP-VK.multiview.renderpass2.masks.15
 dEQP-VK.multiview.renderpass2.masks.8
 dEQP-VK.multiview.renderpass2.masks.1_2_4_8
@@ -359401,14 +359400,14 @@
 dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
 dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
 dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.max_multi_view_view_count
 dEQP-VK.subgroups.builtin_var.graphics.subgroupsize
 dEQP-VK.subgroups.builtin_var.graphics.subgroupinvocationid
 dEQP-VK.subgroups.builtin_var.compute.subgroupsize_compute
diff --git a/android/cts/master/vk-master-2019-03-01.txt b/android/cts/master/vk-master-2019-03-01.txt
index 4721654..0900358 100644
--- a/android/cts/master/vk-master-2019-03-01.txt
+++ b/android/cts/master/vk-master-2019-03-01.txt
@@ -220380,7 +220380,6 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimitlow.sbolimithigh.sampledimglow.outimgtexlow.iublimithigh.uab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimitlow.sbolimithigh.sampledimglow.outimgtexlow.iublimithigh.uab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimitlow.sbolimithigh.sampledimglow.outimgtexlow.iublimithigh.uab.vert.noia.0
-dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.vert.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.rgen.noia.0
@@ -359239,14 +359238,14 @@
 dEQP-VK.multiview.index.geometry_shader.5_10_5_10
 dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32
 dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count
-dEQP-VK.multiview.index.tesellation_shader.15
-dEQP-VK.multiview.index.tesellation_shader.8
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8
-dEQP-VK.multiview.index.tesellation_shader.15_15_15_15
-dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.index.tesellation_shader.5_10_5_10
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
-dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.index.tessellation_shader.15
+dEQP-VK.multiview.index.tessellation_shader.8
+dEQP-VK.multiview.index.tessellation_shader.1_2_4_8
+dEQP-VK.multiview.index.tessellation_shader.15_15_15_15
+dEQP-VK.multiview.index.tessellation_shader.8_1_1_8
+dEQP-VK.multiview.index.tessellation_shader.5_10_5_10
+dEQP-VK.multiview.index.tessellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.tessellation_shader.max_multi_view_view_count
 dEQP-VK.multiview.renderpass2.masks.15
 dEQP-VK.multiview.renderpass2.masks.8
 dEQP-VK.multiview.renderpass2.masks.1_2_4_8
@@ -359401,14 +359400,14 @@
 dEQP-VK.multiview.renderpass2.index.geometry_shader.5_10_5_10
 dEQP-VK.multiview.renderpass2.index.geometry_shader.1_2_4_8_16_32
 dEQP-VK.multiview.renderpass2.index.geometry_shader.max_multi_view_view_count
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.15
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.8
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.15_15_15_15
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.5_10_5_10
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.1_2_4_8_16_32
-dEQP-VK.multiview.renderpass2.index.tesellation_shader.max_multi_view_view_count
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.15
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.8
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.1_2_4_8
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.15_15_15_15
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.8_1_1_8
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.5_10_5_10
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.renderpass2.index.tessellation_shader.max_multi_view_view_count
 dEQP-VK.subgroups.builtin_var.graphics.subgroupsize
 dEQP-VK.subgroups.builtin_var.graphics.subgroupinvocationid
 dEQP-VK.subgroups.builtin_var.compute.subgroupsize_compute
diff --git a/android/cts/master/vk-master-2021-03-01.txt b/android/cts/master/vk-master-2021-03-01.txt
index fb4bbca..2cea495 100644
--- a/android/cts/master/vk-master-2021-03-01.txt
+++ b/android/cts/master/vk-master-2021-03-01.txt
@@ -78648,6 +78648,7 @@
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimitlow.sbolimitlow.sampledimghigh.outimgtexlow.iublimitlow.uab.chit.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimitlow.sbolimitlow.sampledimghigh.outimgtexlow.iublimitlow.uab.miss.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimitlow.sbolimitlow.sampledimghigh.outimgtexlow.iublimitlow.uab.call.noia.0
+dEQP-VK.binding_model.descriptorset_random.sets4.constant.ubolimithigh.sbolimitlow.sampledimglow.outimgtexlow.noiub.nouab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.unifindexed.noubo.nosbo.nosampledimg.outimgonly.noiub.nouab.comp.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.unifindexed.noubo.nosbo.nosampledimg.outimgonly.noiub.nouab.frag.noia.0
 dEQP-VK.binding_model.descriptorset_random.sets4.unifindexed.noubo.nosbo.nosampledimg.outimgonly.noiub.nouab.frag.ialimitlow.0
@@ -102466,6 +102467,1218 @@
 dEQP-VK.spirv_assembly.instruction.compute.opundef.undefined_constant_composite
 dEQP-VK.spirv_assembly.instruction.compute.opundef.undefined_spec_constant_composite
 dEQP-VK.spirv_assembly.instruction.compute.opunreachable.unreachable-switch-merge-in-loop
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.small_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.all_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.small_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.all_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.small_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.all_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.small_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.all_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.limits-neg_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.small_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.all_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.limits_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v2i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v2i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v2i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v3i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v3i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v3i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_ss_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_ss_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_ss_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_su_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_su_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_su_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_us_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_us_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_us_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_uu_v4i8_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_uu_v4i8_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.small_packed_uu_v4i8_out8
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v2i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v2i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v3i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v3i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v4i16_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v4i16_out16
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.all_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits_ss_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v2i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v3i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_uu_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_us_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_su_v4i32_out32
+dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.limits-neg_ss_v4i32_out32
 dEQP-VK.spirv_assembly.instruction.compute.fconvert.float16_to_float64_no_storage
 dEQP-VK.spirv_assembly.instruction.compute.fconvert.float64_to_float16_no_storage
 dEQP-VK.spirv_assembly.instruction.compute.float_controls.fp16.input_args.denorm_add_var_flush_to_zero_nostorage
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index 5e95cbd..932426d 100644
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
Binary files differ
diff --git a/external/fetch_sources.py b/external/fetch_sources.py
index b37ae1d..f5556d0 100644
--- a/external/fetch_sources.py
+++ b/external/fetch_sources.py
@@ -317,7 +317,7 @@
 	GitRepo(
 		"https://github.com/KhronosGroup/SPIRV-Tools.git",
 		None,
-		"f11f7434815838bbad349124767b258ce7df41f0",
+		"e065c482c6c98ef22900822d32a21df8c5473054",
 		"spirv-tools"),
 	GitRepo(
 		"https://github.com/KhronosGroup/glslang.git",
@@ -328,7 +328,7 @@
 	GitRepo(
 		"https://github.com/KhronosGroup/SPIRV-Headers.git",
 		None,
-		"faa570afbc91ac73d594d787486bcf8f2df1ace0",
+		"449bc986ba6f4c5e10e32828783f9daef2a77644",
 		"spirv-headers"),
 	GitRepo(
 		"https://github.com/google/amber.git",
diff --git a/external/openglcts/modules/common/glcPackedPixelsTests.cpp b/external/openglcts/modules/common/glcPackedPixelsTests.cpp
index 08119f9..0dd9b4e 100644
--- a/external/openglcts/modules/common/glcPackedPixelsTests.cpp
+++ b/external/openglcts/modules/common/glcPackedPixelsTests.cpp
@@ -1814,7 +1814,8 @@
 		// and conversions to SNORM internalformats are not allowed by Table 3.2
 		(copyInternalFormat.sampler == SAMPLER_NORM) ||
 		((copyInternalFormat.sizedFormat == GL_RGB9_E5) &&
-		 !contextInfo.isExtensionSupported("GL_APPLE_color_buffer_packed_float")))
+		 (!contextInfo.isExtensionSupported("GL_APPLE_color_buffer_packed_float") &&
+		  !contextInfo.isExtensionSupported("GL_QCOM_render_shared_exponent"))))
 	{
 		/* Some formats are activated by extensions, check. */
 		if (((internalFormat.baseFormat == GL_LUMINANCE && copyInternalFormat.baseFormat == GL_LUMINANCE) ||
@@ -1913,6 +1914,12 @@
 					return true;
 				}
 
+				if ((GL_RGB9_E5 == validFormat->internalformat) &&
+					contextInfo.isExtensionSupported("GL_QCOM_render_shared_exponent"))
+				{
+					return true;
+				}
+
 				if ((GL_LUMINANCE == validFormat->internalformat || GL_ALPHA == validFormat->internalformat ||
 					 GL_LUMINANCE_ALPHA == validFormat->internalformat) &&
 					contextInfo.isExtensionSupported("GL_NV_render_luminance_alpha"))
diff --git a/external/vulkancts/framework/vulkan/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/vkBasicTypes.inl
index 099d5c0..16d0711 100644
--- a/external/vulkancts/framework/vulkan/vkBasicTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkBasicTypes.inl
@@ -598,6 +598,8 @@
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV				= 1000277007,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV			= 1000278000,
 	VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV				= 1000278001,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR			= 1000280000,
+	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR			= 1000280001,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT				= 1000281000,
 	VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT				= 1000281001,
 	VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM		= 1000282000,
@@ -3989,6 +3991,7 @@
 #define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1
 #define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4
 #define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1
 #define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1
 #define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1
 #define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1
diff --git a/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl b/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
index 7b29a81..e47d237 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceExtensions.inl
@@ -74,5 +74,6 @@
 	"VK_KHR_workgroup_memory_explicit_layout",
 	"VK_KHR_synchronization2",
 	"VK_EXT_color_write_enable",
+	"VK_KHR_shader_integer_dot_product",
 };
 
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl b/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
index 4c45dd7..e8d6e65e 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
@@ -68,6 +68,7 @@
 #define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
 #define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64"
 #define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint"
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product"
 #define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2"
 #define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins"
 #define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types"
@@ -206,6 +207,7 @@
 template<> void initFeatureFromBlob<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(VkPhysicalDeviceFragmentShadingRateFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR>(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceSynchronization2FeaturesKHR>(VkPhysicalDeviceSynchronization2FeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR&, const AllFeaturesBlobs&) {}
 template<> void initFeatureFromBlob<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>(VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR&, const AllFeaturesBlobs&) {}
@@ -267,69 +269,70 @@
 template<> void initFeatureFromBlob<VkPhysicalDevicePortabilitySubsetFeaturesKHR>(VkPhysicalDevicePortabilitySubsetFeaturesKHR&, const AllFeaturesBlobs&) {}
 
 
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 83}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice4444FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, 82}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 81}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceAccelerationStructureFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION, 80}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceASTCDecodeFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION, 79}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 78}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 77}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 76}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 75}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceColorWriteEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME, VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION, 74}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 73}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 72}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 71}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 70}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 69}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCustomBorderColorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 68}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 67}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 66}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 65}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION, 64}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION, 63}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME, 0, 62}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 61}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION, 60}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION, 59}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 58}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION, 57}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 56}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 55}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 54}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION, 53}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 52}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 51}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageRobustnessFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, 50}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 49}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME, VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION, 48}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 47}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 46}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 45}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 44}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 43}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION, 42}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 41}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION, 40}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 39}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePortabilitySubsetFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION, 38}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrivateDataFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION, 37}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 36}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, VK_KHR_RAY_QUERY_EXTENSION_NAME, VK_KHR_RAY_QUERY_SPEC_VERSION, 35}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION, 34}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 33}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRobustness2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 32}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 31}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 30}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION, 29}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION, 28}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 27}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 26}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 25}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 24}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 23}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION, 22}; }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 21}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 84}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice4444FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, 83}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 82}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceAccelerationStructureFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR, VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION, 81}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceASTCDecodeFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION, 80}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 79}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 78}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 77}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 76}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceColorWriteEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT, VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME, VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION, 75}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 74}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 73}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 72}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 71}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 70}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCustomBorderColorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 69}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 68}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 67}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 66}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV, VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION, 65}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT, VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION, 64}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDiagnosticsConfigFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV, DECL_NV_DIAGNOSTICS_CONFIG_EXTENSION_NAME, 0, 63}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 62}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION, 61}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION, 60}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 59}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION, 58}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 57}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 56}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 55}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION, 54}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 53}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 52}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageRobustnessFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, 51}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 50}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInheritedViewportScissorFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV, VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME, VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION, 49}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 48}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 47}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 46}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 45}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 44}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME, VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION, 43}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 42}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION, 41}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 40}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePortabilitySubsetFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION, 39}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePrivateDataFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT, VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION, 38}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 37}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayQueryFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR, VK_KHR_RAY_QUERY_EXTENSION_NAME, VK_KHR_RAY_QUERY_SPEC_VERSION, 36}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION, 35}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 34}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRobustness2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 33}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 32}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 31}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION, 30}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION, 29}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 28}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 27}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 26}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 25}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 24}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION, 23}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 22}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION, 21}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 20}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION, 19}; }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, 18}; }
@@ -417,6 +420,7 @@
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderFloat16Int8Features>, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderImageFootprintFeaturesNV>, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION },
+	{ createFeatureStructWrapper<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR>, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>, VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION },
 	{ createFeatureStructWrapper<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION },
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl b/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
index 504694e..1fdba9d 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
@@ -18,6 +18,7 @@
 VkPhysicalDeviceTimelineSemaphoreFeatures			deviceTimelineSemaphoreFeatures[count];
 VkPhysicalDeviceFragmentDensityMapFeaturesEXT		deviceFragmentDensityMapFeaturesEXT[count];
 VkPhysicalDeviceFragmentDensityMap2FeaturesEXT		deviceFragmentDensityMap2FeaturesEXT[count];
+VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR	deviceShaderIntegerDotProductFeaturesKHR[count];
 
 const bool isConditionalRenderingFeaturesEXT	= checkExtension(properties, "VK_EXT_conditional_rendering");
 const bool isScalarBlockLayoutFeatures			= checkExtension(properties, "VK_EXT_scalar_block_layout")			|| context.contextSupports(vk::ApiVersion(1, 2, 0));
@@ -36,6 +37,7 @@
 const bool isTimelineSemaphoreFeatures			= checkExtension(properties, "VK_KHR_timeline_semaphore")			|| context.contextSupports(vk::ApiVersion(1, 2, 0));
 const bool isFragmentDensityMapFeaturesEXT		= checkExtension(properties, "VK_EXT_fragment_density_map");
 const bool isFragmentDensityMap2FeaturesEXT		= checkExtension(properties, "VK_EXT_fragment_density_map2");
+const bool isShaderIntegerDotProductFeaturesKHR	= checkExtension(properties, "VK_KHR_shader_integer_dot_product");
 
 for (int ndx = 0; ndx < count; ++ndx)
 {
@@ -56,6 +58,7 @@
 	deMemset(&deviceTimelineSemaphoreFeatures[ndx],			0xFF * ndx, sizeof(VkPhysicalDeviceTimelineSemaphoreFeatures));
 	deMemset(&deviceFragmentDensityMapFeaturesEXT[ndx],		0xFF * ndx, sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT));
 	deMemset(&deviceFragmentDensityMap2FeaturesEXT[ndx],	0xFF * ndx, sizeof(VkPhysicalDeviceFragmentDensityMap2FeaturesEXT));
+	deMemset(&deviceShaderIntegerDotProductFeaturesKHR[ndx],0xFF * ndx, sizeof(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR));
 
 	deviceConditionalRenderingFeaturesEXT[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT;
 	deviceConditionalRenderingFeaturesEXT[ndx].pNext = &deviceScalarBlockLayoutFeatures[ndx];
@@ -106,7 +109,10 @@
 	deviceFragmentDensityMapFeaturesEXT[ndx].pNext = &deviceFragmentDensityMap2FeaturesEXT[ndx];
 
 	deviceFragmentDensityMap2FeaturesEXT[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT;
-	deviceFragmentDensityMap2FeaturesEXT[ndx].pNext = DE_NULL;
+	deviceFragmentDensityMap2FeaturesEXT[ndx].pNext = &deviceShaderIntegerDotProductFeaturesKHR[ndx];
+
+	deviceShaderIntegerDotProductFeaturesKHR[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR;
+	deviceShaderIntegerDotProductFeaturesKHR[ndx].pNext = DE_NULL;
 
 	deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
 	extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
@@ -148,6 +154,8 @@
 	log << TestLog::Message << deviceFragmentDensityMapFeaturesEXT[0] << TestLog::EndMessage;
 if (isFragmentDensityMap2FeaturesEXT)
 	log << TestLog::Message << deviceFragmentDensityMap2FeaturesEXT[0] << TestLog::EndMessage;
+if (isShaderIntegerDotProductFeaturesKHR)
+	log << TestLog::Message << deviceShaderIntegerDotProductFeaturesKHR[0] << TestLog::EndMessage;
 
 if (isConditionalRenderingFeaturesEXT &&
 	(deviceConditionalRenderingFeaturesEXT[0].conditionalRendering != deviceConditionalRenderingFeaturesEXT[1].conditionalRendering ||
@@ -271,3 +279,8 @@
 {
 		TCU_FAIL("Mismatch between VkPhysicalDeviceFragmentDensityMap2FeaturesEXT");
 }
+if (isShaderIntegerDotProductFeaturesKHR &&
+	(deviceShaderIntegerDotProductFeaturesKHR[0].shaderIntegerDotProduct != deviceShaderIntegerDotProductFeaturesKHR[1].shaderIntegerDotProduct))
+{
+		TCU_FAIL("Mismatch between VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR");
+}
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
index 0496a5a..0526adb 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
@@ -64,6 +64,7 @@
 const vk::VkPhysicalDeviceShaderFloat16Int8Features&					getShaderFloat16Int8Features					(void) const;
 const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			getShaderImageAtomicInt64FeaturesEXT			(void) const;
 const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&				getShaderImageFootprintFeatures					(void) const;
+const vk::VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR&			getShaderIntegerDotProductFeatures				(void) const;
 const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			getShaderIntegerFunctions2FeaturesINTEL			(void) const;
 const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					getShaderSMBuiltinsFeatures						(void) const;
 const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			getShaderSubgroupExtendedTypesFeatures			(void) const;
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
index 23de5a4..d4725a2 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
@@ -64,6 +64,7 @@
 const vk::VkPhysicalDeviceShaderFloat16Int8Features&					Context::getShaderFloat16Int8Features					(void) const { return m_device->getShaderFloat16Int8Features();					}
 const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			Context::getShaderImageAtomicInt64FeaturesEXT			(void) const { return m_device->getShaderImageAtomicInt64FeaturesEXT();			}
 const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&				Context::getShaderImageFootprintFeatures				(void) const { return m_device->getShaderImageFootprintFeatures();				}
+const vk::VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR&			Context::getShaderIntegerDotProductFeatures				(void) const { return m_device->getShaderIntegerDotProductFeatures();			}
 const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			Context::getShaderIntegerFunctions2FeaturesINTEL		(void) const { return m_device->getShaderIntegerFunctions2FeaturesINTEL();		}
 const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					Context::getShaderSMBuiltinsFeatures					(void) const { return m_device->getShaderSMBuiltinsFeatures();					}
 const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			Context::getShaderSubgroupExtendedTypesFeatures			(void) const { return m_device->getShaderSubgroupExtendedTypesFeatures();		}
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
index 9a05f26..7a8df78 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
@@ -64,6 +64,7 @@
 const VkPhysicalDeviceShaderFloat16Int8Features&					getShaderFloat16Int8Features					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderFloat16Int8Features>();						}
 const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&			getShaderImageAtomicInt64FeaturesEXT			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();				}
 const VkPhysicalDeviceShaderImageFootprintFeaturesNV&				getShaderImageFootprintFeatures					(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV>();				}
+const VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR&			getShaderIntegerDotProductFeatures				(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR>();			}
 const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&			getShaderIntegerFunctions2FeaturesINTEL			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>();			}
 const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&					getShaderSMBuiltinsFeatures						(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>();					}
 const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&			getShaderSubgroupExtendedTypesFeatures			(void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();			}
diff --git a/external/vulkancts/framework/vulkan/vkDeviceProperties.inl b/external/vulkancts/framework/vulkan/vkDeviceProperties.inl
index a61d3cb..42d0c81 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceProperties.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceProperties.inl
@@ -40,6 +40,7 @@
 #define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
 #define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties"
 #define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2"
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product"
 #define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
 #define DECL_SUBGROUP_EXTENSION_NAME "core_property"
 #define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
@@ -161,6 +162,7 @@
 template<> void initPropertyFromBlob<VkPhysicalDevicePerformanceQueryPropertiesKHR>(VkPhysicalDevicePerformanceQueryPropertiesKHR&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>(VkPhysicalDeviceFragmentShadingRatePropertiesKHR&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR>(VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceTransformFeedbackPropertiesEXT>(VkPhysicalDeviceTransformFeedbackPropertiesEXT&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>(VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX&, const AllPropertiesBlobs&) {}
 template<> void initPropertyFromBlob<VkPhysicalDeviceDiscardRectanglePropertiesEXT>(VkPhysicalDeviceDiscardRectanglePropertiesEXT&, const AllPropertiesBlobs&) {}
@@ -194,41 +196,42 @@
 template<> void initPropertyFromBlob<VkPhysicalDevicePortabilitySubsetPropertiesKHR>(VkPhysicalDevicePortabilitySubsetPropertiesKHR&, const AllPropertiesBlobs&) {}
 
 
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceAccelerationStructurePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR, VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION, 42}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 41}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION, 40}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceCooperativeMatrixPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 39}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceCustomBorderColorPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 38}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDepthStencilResolveProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION, 37}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDescriptorIndexingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 36}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV, VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION, 35}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDiscardRectanglePropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME, VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION, 34}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDriverProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION, 33}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceExternalMemoryHostPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT, VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION, 32}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFloatControlsProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION, 31}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentDensityMapPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 30}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION, 29}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 28}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION, 27}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceIDProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, DECL_ID_EXTENSION_NAME, 0, 26}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceInlineUniformBlockPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 25}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceLineRasterizationPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 24}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMaintenance3Properties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, VK_KHR_MAINTENANCE3_EXTENSION_NAME, VK_KHR_MAINTENANCE3_SPEC_VERSION, 23}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMeshShaderPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 22}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMultiviewProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 21}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX, VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME, VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION, 20}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePerformanceQueryPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 19}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePointClippingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, VK_KHR_MAINTENANCE2_EXTENSION_NAME, VK_KHR_MAINTENANCE2_SPEC_VERSION, 18}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePortabilitySubsetPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION, 17}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceProtectedMemoryProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 16}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePushDescriptorPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION, 15}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRayTracingPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV, VK_NV_RAY_TRACING_EXTENSION_NAME, VK_NV_RAY_TRACING_SPEC_VERSION, 14}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRayTracingPipelinePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION, 13}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRobustness2PropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 12}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSamplerFilterMinmaxProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION, 11}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSampleLocationsPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT, VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION, 10}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceShaderCorePropertiesAMD>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION, 9}; }
-template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceShaderCoreProperties2AMD>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD, VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION, 8}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceAccelerationStructurePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR, VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION, 43}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 42}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION, 41}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceCooperativeMatrixPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 40}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceCustomBorderColorPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 39}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDepthStencilResolveProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION, 38}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDescriptorIndexingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 37}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV, VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME, VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION, 36}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDiscardRectanglePropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME, VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION, 35}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDriverProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION, 34}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceExternalMemoryHostPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT, VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION, 33}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFloatControlsProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION, 32}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentDensityMapPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 31}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION, 30}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 29}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME, VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION, 28}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceIDProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, DECL_ID_EXTENSION_NAME, 0, 27}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceInlineUniformBlockPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 26}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceLineRasterizationPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 25}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMaintenance3Properties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, VK_KHR_MAINTENANCE3_EXTENSION_NAME, VK_KHR_MAINTENANCE3_SPEC_VERSION, 24}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMeshShaderPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 23}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMultiviewProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 22}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX, VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME, VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION, 21}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePerformanceQueryPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 20}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePointClippingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, VK_KHR_MAINTENANCE2_EXTENSION_NAME, VK_KHR_MAINTENANCE2_SPEC_VERSION, 19}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePortabilitySubsetPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR, VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION, 18}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceProtectedMemoryProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 17}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePushDescriptorPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION, 16}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRayTracingPropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV, VK_NV_RAY_TRACING_EXTENSION_NAME, VK_NV_RAY_TRACING_SPEC_VERSION, 15}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRayTracingPipelinePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION, 14}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRobustness2PropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 13}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSamplerFilterMinmaxProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION, 12}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSampleLocationsPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT, VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION, 11}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceShaderCorePropertiesAMD>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION, 10}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceShaderCoreProperties2AMD>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD, VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION, 9}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION, 8}; }
 template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceShadingRateImagePropertiesNV>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 7}; }
 template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSubgroupProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES, DECL_SUBGROUP_EXTENSION_NAME, 0, 6}; }
 template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 5}; }
@@ -275,6 +278,7 @@
 	{ createPropertyStructWrapper<VkPhysicalDeviceSampleLocationsPropertiesEXT>, VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION },
 	{ createPropertyStructWrapper<VkPhysicalDeviceShaderCorePropertiesAMD>, VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION },
 	{ createPropertyStructWrapper<VkPhysicalDeviceShaderCoreProperties2AMD>, VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION },
+	{ createPropertyStructWrapper<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR>, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION },
 	{ createPropertyStructWrapper<VkPhysicalDeviceShadingRateImagePropertiesNV>, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION },
 	{ createPropertyStructWrapper<VkPhysicalDeviceSubgroupProperties>, DECL_SUBGROUP_EXTENSION_NAME, 0 },
 	{ createPropertyStructWrapper<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION },
diff --git a/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl b/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl
index e3747f4..5e7960a 100644
--- a/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl
+++ b/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl
@@ -36,6 +36,7 @@
 const vk::VkPhysicalDeviceSampleLocationsPropertiesEXT&				getSampleLocationsPropertiesEXT				(void) const;
 const vk::VkPhysicalDeviceShaderCorePropertiesAMD&					getShaderCorePropertiesAMD					(void) const;
 const vk::VkPhysicalDeviceShaderCoreProperties2AMD&					getShaderCoreProperties2AMD					(void) const;
+const vk::VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR&		getShaderIntegerDotProductProperties		(void) const;
 const vk::VkPhysicalDeviceShadingRateImagePropertiesNV&				getShadingRateImageProperties				(void) const;
 const vk::VkPhysicalDeviceSubgroupProperties&						getSubgroupProperties						(void) const;
 const vk::VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&			getSubgroupSizeControlPropertiesEXT			(void) const;
diff --git a/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl b/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl
index c4f31d3..b5ec8b2 100644
--- a/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl
@@ -36,6 +36,7 @@
 const vk::VkPhysicalDeviceSampleLocationsPropertiesEXT&				Context::getSampleLocationsPropertiesEXT			(void) const { return m_device->getSampleLocationsPropertiesEXT();				}
 const vk::VkPhysicalDeviceShaderCorePropertiesAMD&					Context::getShaderCorePropertiesAMD					(void) const { return m_device->getShaderCorePropertiesAMD();					}
 const vk::VkPhysicalDeviceShaderCoreProperties2AMD&					Context::getShaderCoreProperties2AMD				(void) const { return m_device->getShaderCoreProperties2AMD();					}
+const vk::VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR&		Context::getShaderIntegerDotProductProperties		(void) const { return m_device->getShaderIntegerDotProductProperties();			}
 const vk::VkPhysicalDeviceShadingRateImagePropertiesNV&				Context::getShadingRateImageProperties				(void) const { return m_device->getShadingRateImageProperties();				}
 const vk::VkPhysicalDeviceSubgroupProperties&						Context::getSubgroupProperties						(void) const { return m_device->getSubgroupProperties();						}
 const vk::VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&			Context::getSubgroupSizeControlPropertiesEXT		(void) const { return m_device->getSubgroupSizeControlPropertiesEXT();			}
diff --git a/external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl
index a0bfa0c..bbd3cd6 100644
--- a/external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl
+++ b/external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl
@@ -36,6 +36,7 @@
 const VkPhysicalDeviceSampleLocationsPropertiesEXT&				getSampleLocationsPropertiesEXT				(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSampleLocationsPropertiesEXT>();				}
 const VkPhysicalDeviceShaderCorePropertiesAMD&					getShaderCorePropertiesAMD					(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceShaderCorePropertiesAMD>();					}
 const VkPhysicalDeviceShaderCoreProperties2AMD&					getShaderCoreProperties2AMD					(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceShaderCoreProperties2AMD>();					}
+const VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR&		getShaderIntegerDotProductProperties		(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR>();		}
 const VkPhysicalDeviceShadingRateImagePropertiesNV&				getShadingRateImageProperties				(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceShadingRateImagePropertiesNV>();				}
 const VkPhysicalDeviceSubgroupProperties&						getSubgroupProperties						(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSubgroupProperties>();							}
 const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&			getSubgroupSizeControlPropertiesEXT			(void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>();			}
diff --git a/external/vulkancts/framework/vulkan/vkExtensionFunctions.inl b/external/vulkancts/framework/vulkan/vkExtensionFunctions.inl
index e201baf..c75bf6f 100644
--- a/external/vulkancts/framework/vulkan/vkExtensionFunctions.inl
+++ b/external/vulkancts/framework/vulkan/vkExtensionFunctions.inl
@@ -282,6 +282,10 @@
 	{
 		return;
 	}
+	if (extName == "VK_KHR_shader_integer_dot_product")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_pipeline_library")
 	{
 		return;
@@ -1331,6 +1335,10 @@
 		functions.push_back("vkGetPipelineExecutableInternalRepresentationsKHR");
 		return;
 	}
+	if (extName == "VK_KHR_shader_integer_dot_product")
+	{
+		return;
+	}
 	if (extName == "VK_KHR_pipeline_library")
 	{
 		return;
diff --git a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
index 1af5bc3..8347709 100644
--- a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
@@ -1061,6 +1061,16 @@
 	return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR> (void)
+{
+	return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR;
+}
+
 template<> VkStructureType getStructureType<VkPipelineLibraryCreateInfoKHR> (void)
 {
 	return VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR;
diff --git a/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl b/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
index 9063c90..10bab72 100644
--- a/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
+++ b/external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
@@ -336,6 +336,16 @@
 		nextPtr  = &physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext;
 	}
 
+	vk::VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR physicalDeviceShaderIntegerDotProductFeaturesKHR;
+	deMemset(&physicalDeviceShaderIntegerDotProductFeaturesKHR, 0, sizeof(physicalDeviceShaderIntegerDotProductFeaturesKHR));
+
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_integer_dot_product")) )
+	{
+		physicalDeviceShaderIntegerDotProductFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR>();
+		*nextPtr = &physicalDeviceShaderIntegerDotProductFeaturesKHR;
+		nextPtr  = &physicalDeviceShaderIntegerDotProductFeaturesKHR.pNext;
+	}
+
 	vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR;
 	deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR));
 
@@ -1671,6 +1681,15 @@
 		}
 	}
 
+	if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_integer_dot_product")) )
+	{
+		if ( physicalDeviceShaderIntegerDotProductFeaturesKHR.shaderIntegerDotProduct == VK_FALSE )
+		{
+			log << tcu::TestLog::Message << "Mandatory feature shaderIntegerDotProduct not supported" << tcu::TestLog::EndMessage;
+			result = false;
+		}
+	}
+
 	return result;
 }
 
diff --git a/external/vulkancts/framework/vulkan/vkStrUtil.inl b/external/vulkancts/framework/vulkan/vkStrUtil.inl
index ae78d86..44b3adf 100644
--- a/external/vulkancts/framework/vulkan/vkStrUtil.inl
+++ b/external/vulkancts/framework/vulkan/vkStrUtil.inl
@@ -784,6 +784,8 @@
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineExecutableStatisticValueKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineExecutableStatisticKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineExecutableInternalRepresentationKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR& value);
+std::ostream&	operator<<	(std::ostream& s, const VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkPipelineLibraryCreateInfoKHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkMemoryBarrier2KHR& value);
 std::ostream&	operator<<	(std::ostream& s, const VkBufferMemoryBarrier2KHR& value);
diff --git a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
index c0762a0..0d419e2 100644
--- a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
@@ -599,6 +599,8 @@
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV";
 		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV:				return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR";
+		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT";
 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT";
 		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:		return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM";
@@ -8120,6 +8122,55 @@
 	return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR& value)
+{
+	s << "VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tshaderIntegerDotProduct = " << value.shaderIntegerDotProduct << '\n';
+	s << '}';
+	return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR& value)
+{
+	s << "VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR = {\n";
+	s << "\tsType = " << value.sType << '\n';
+	s << "\tpNext = " << value.pNext << '\n';
+	s << "\tintegerDotProduct8BitUnsignedAccelerated = " << value.integerDotProduct8BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProduct8BitSignedAccelerated = " << value.integerDotProduct8BitSignedAccelerated << '\n';
+	s << "\tintegerDotProduct8BitMixedSignednessAccelerated = " << value.integerDotProduct8BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProduct4x8BitPackedUnsignedAccelerated = " << value.integerDotProduct4x8BitPackedUnsignedAccelerated << '\n';
+	s << "\tintegerDotProduct4x8BitPackedSignedAccelerated = " << value.integerDotProduct4x8BitPackedSignedAccelerated << '\n';
+	s << "\tintegerDotProduct4x8BitPackedMixedSignednessAccelerated = " << value.integerDotProduct4x8BitPackedMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProduct16BitUnsignedAccelerated = " << value.integerDotProduct16BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProduct16BitSignedAccelerated = " << value.integerDotProduct16BitSignedAccelerated << '\n';
+	s << "\tintegerDotProduct16BitMixedSignednessAccelerated = " << value.integerDotProduct16BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProduct32BitUnsignedAccelerated = " << value.integerDotProduct32BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProduct32BitSignedAccelerated = " << value.integerDotProduct32BitSignedAccelerated << '\n';
+	s << "\tintegerDotProduct32BitMixedSignednessAccelerated = " << value.integerDotProduct32BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProduct64BitUnsignedAccelerated = " << value.integerDotProduct64BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProduct64BitSignedAccelerated = " << value.integerDotProduct64BitSignedAccelerated << '\n';
+	s << "\tintegerDotProduct64BitMixedSignednessAccelerated = " << value.integerDotProduct64BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating8BitUnsignedAccelerated = " << value.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating8BitSignedAccelerated = " << value.integerDotProductAccumulatingSaturating8BitSignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = " << value.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = " << value.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = " << value.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = " << value.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating16BitUnsignedAccelerated = " << value.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating16BitSignedAccelerated = " << value.integerDotProductAccumulatingSaturating16BitSignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = " << value.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating32BitUnsignedAccelerated = " << value.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating32BitSignedAccelerated = " << value.integerDotProductAccumulatingSaturating32BitSignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = " << value.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating64BitUnsignedAccelerated = " << value.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating64BitSignedAccelerated = " << value.integerDotProductAccumulatingSaturating64BitSignedAccelerated << '\n';
+	s << "\tintegerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = " << value.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated << '\n';
+	s << '}';
+	return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkPipelineLibraryCreateInfoKHR& value)
 {
 	s << "VkPipelineLibraryCreateInfoKHR = {\n";
diff --git a/external/vulkancts/framework/vulkan/vkStructTypes.inl b/external/vulkancts/framework/vulkan/vkStructTypes.inl
index f24ecbf..4f4b069 100644
--- a/external/vulkancts/framework/vulkan/vkStructTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkStructTypes.inl
@@ -2891,6 +2891,49 @@
 	void*			pData;
 };
 
+struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		shaderIntegerDotProduct;
+};
+
+struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR
+{
+	VkStructureType	sType;
+	void*			pNext;
+	VkBool32		integerDotProduct8BitUnsignedAccelerated;
+	VkBool32		integerDotProduct8BitSignedAccelerated;
+	VkBool32		integerDotProduct8BitMixedSignednessAccelerated;
+	VkBool32		integerDotProduct4x8BitPackedUnsignedAccelerated;
+	VkBool32		integerDotProduct4x8BitPackedSignedAccelerated;
+	VkBool32		integerDotProduct4x8BitPackedMixedSignednessAccelerated;
+	VkBool32		integerDotProduct16BitUnsignedAccelerated;
+	VkBool32		integerDotProduct16BitSignedAccelerated;
+	VkBool32		integerDotProduct16BitMixedSignednessAccelerated;
+	VkBool32		integerDotProduct32BitUnsignedAccelerated;
+	VkBool32		integerDotProduct32BitSignedAccelerated;
+	VkBool32		integerDotProduct32BitMixedSignednessAccelerated;
+	VkBool32		integerDotProduct64BitUnsignedAccelerated;
+	VkBool32		integerDotProduct64BitSignedAccelerated;
+	VkBool32		integerDotProduct64BitMixedSignednessAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating8BitSignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating16BitSignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating32BitSignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating64BitSignedAccelerated;
+	VkBool32		integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
+};
+
 struct VkPipelineLibraryCreateInfoKHR
 {
 	VkStructureType		sType;
diff --git a/external/vulkancts/framework/vulkan/vkVulkan_c.inl b/external/vulkancts/framework/vulkan/vkVulkan_c.inl
index 7fedba6..c61e65f 100644
--- a/external/vulkancts/framework/vulkan/vkVulkan_c.inl
+++ b/external/vulkancts/framework/vulkan/vkVulkan_c.inl
@@ -1656,6 +1656,8 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000,
     VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = 1000280000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = 1000280001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
     VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000,
@@ -8706,6 +8708,52 @@
 #endif
 
 
+#define VK_KHR_shader_integer_dot_product 1
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product"
+typedef struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderIntegerDotProduct;
+} VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+
+typedef struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           integerDotProduct8BitUnsignedAccelerated;
+    VkBool32           integerDotProduct8BitSignedAccelerated;
+    VkBool32           integerDotProduct8BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedUnsignedAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedSignedAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedMixedSignednessAccelerated;
+    VkBool32           integerDotProduct16BitUnsignedAccelerated;
+    VkBool32           integerDotProduct16BitSignedAccelerated;
+    VkBool32           integerDotProduct16BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct32BitUnsignedAccelerated;
+    VkBool32           integerDotProduct32BitSignedAccelerated;
+    VkBool32           integerDotProduct32BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct64BitUnsignedAccelerated;
+    VkBool32           integerDotProduct64BitSignedAccelerated;
+    VkBool32           integerDotProduct64BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
+} VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+
+
+
 #define VK_KHR_pipeline_library 1
 #define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1
 #define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library"
diff --git a/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
index f4de7e4..6fc04a1 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp
@@ -1173,6 +1173,7 @@
 		clearColor.float32[2] = 1.0f;
 		clearColor.float32[3] = 1.0f;
 		vk.cmdClearColorImage(*m_cmdBuffer, m_destination.get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearColor, 1u, &range);
+		vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, DE_LENGTH_OF_ARRAY(imageBarriers), imageBarriers);
 	}
 
 	if (m_params.extensionUse == EXTENSION_USE_NONE)
diff --git a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
index bffc643..77b076a 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
@@ -4091,19 +4091,7 @@
 	const vk::InstanceDriver&					  vki					(instance.getDriver());
 	const vk::VkPhysicalDevice					  physicalDevice		(vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine()));
 	const deUint32								  queueFamilyIndex		(chooseQueueFamilyIndex(vki, physicalDevice, 0u));
-
-	vk::VkPhysicalDeviceProtectedMemoryFeatures		protectedFeatures;
-	protectedFeatures.sType				= vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
-	protectedFeatures.pNext				= DE_NULL;
-	protectedFeatures.protectedMemory	= VK_FALSE;
-
-	vk::VkPhysicalDeviceFeatures2					deviceFeatures;
-	deviceFeatures.sType		= vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
-	deviceFeatures.pNext		= &protectedFeatures;
-
-	vki.getPhysicalDeviceFeatures2(physicalDevice, &deviceFeatures);
-
-	const vk::Unique<vk::VkDevice>				  device				(createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, externalMemoryType, 0u, queueFamilyIndex, false, &protectedFeatures));
+	const vk::Unique<vk::VkDevice>				  device				(createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, externalMemoryType, 0u, queueFamilyIndex));
 	const vk::DeviceDriver						  vkd					(vkp, instance, *device);
 	TestLog&									  log				  = context.getTestContext().getLog();
 	const vk::VkPhysicalDeviceLimits			  limits			  = getPhysicalDeviceProperties(vki, physicalDevice).limits;
diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
index d3f5c1f..bf6a60a 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
@@ -4089,18 +4089,20 @@
 	const bool khr_shader_float_controls			= checkExtension(properties, "VK_KHR_shader_float_controls")			||	context.contextSupports(vk::ApiVersion(1, 2, 0));
 	const bool khr_descriptor_indexing				= checkExtension(properties, "VK_EXT_descriptor_indexing")				||	context.contextSupports(vk::ApiVersion(1, 2, 0));
 	const bool khr_sampler_filter_minmax			= checkExtension(properties, "VK_EXT_sampler_filter_minmax")			||	context.contextSupports(vk::ApiVersion(1, 2, 0));
+	const bool khr_integer_dot_product				= checkExtension(properties, "VK_KHR_shader_integer_dot_product");
 
-	VkPhysicalDeviceIDProperties					idProperties[count];
-	VkPhysicalDeviceMultiviewProperties				multiviewProperties[count];
-	VkPhysicalDeviceProtectedMemoryProperties		protectedMemoryPropertiesKHR[count];
-	VkPhysicalDeviceSubgroupProperties				subgroupProperties[count];
-	VkPhysicalDevicePointClippingProperties			pointClippingProperties[count];
-	VkPhysicalDeviceMaintenance3Properties			maintenance3Properties[count];
-	VkPhysicalDeviceDepthStencilResolveProperties	depthStencilResolveProperties[count];
-	VkPhysicalDeviceDriverProperties				driverProperties[count];
-	VkPhysicalDeviceFloatControlsProperties			floatControlsProperties[count];
-	VkPhysicalDeviceDescriptorIndexingProperties	descriptorIndexingProperties[count];
-	VkPhysicalDeviceSamplerFilterMinmaxProperties	samplerFilterMinmaxProperties[count];
+	VkPhysicalDeviceIDProperties							idProperties[count];
+	VkPhysicalDeviceMultiviewProperties						multiviewProperties[count];
+	VkPhysicalDeviceProtectedMemoryProperties				protectedMemoryPropertiesKHR[count];
+	VkPhysicalDeviceSubgroupProperties						subgroupProperties[count];
+	VkPhysicalDevicePointClippingProperties					pointClippingProperties[count];
+	VkPhysicalDeviceMaintenance3Properties					maintenance3Properties[count];
+	VkPhysicalDeviceDepthStencilResolveProperties			depthStencilResolveProperties[count];
+	VkPhysicalDeviceDriverProperties						driverProperties[count];
+	VkPhysicalDeviceFloatControlsProperties					floatControlsProperties[count];
+	VkPhysicalDeviceDescriptorIndexingProperties			descriptorIndexingProperties[count];
+	VkPhysicalDeviceSamplerFilterMinmaxProperties			samplerFilterMinmaxProperties[count];
+	VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR	integerDotProductProperties[count];
 
 	for (int ndx = 0; ndx < count; ++ndx)
 	{
@@ -4115,6 +4117,7 @@
 		deMemset(&floatControlsProperties[ndx],			0xFF*ndx, sizeof(VkPhysicalDeviceFloatControlsProperties		));
 		deMemset(&descriptorIndexingProperties[ndx],	0xFF*ndx, sizeof(VkPhysicalDeviceDescriptorIndexingProperties	));
 		deMemset(&samplerFilterMinmaxProperties[ndx],	0xFF*ndx, sizeof(VkPhysicalDeviceSamplerFilterMinmaxProperties	));
+		deMemset(&integerDotProductProperties[ndx],		0xFF*ndx, sizeof(VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR	));
 
 		idProperties[ndx].sType						= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
 		idProperties[ndx].pNext						= &multiviewProperties[ndx];
@@ -4147,7 +4150,10 @@
 		descriptorIndexingProperties[ndx].pNext		= &samplerFilterMinmaxProperties[ndx];
 
 		samplerFilterMinmaxProperties[ndx].sType	= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES;
-		samplerFilterMinmaxProperties[ndx].pNext	= DE_NULL;
+		samplerFilterMinmaxProperties[ndx].pNext	= &integerDotProductProperties[ndx];
+
+		integerDotProductProperties[ndx].sType		= VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR;
+		integerDotProductProperties[ndx].pNext		= DE_NULL;
 
 		extProperties.pNext							= &idProperties[ndx];
 
@@ -4176,6 +4182,8 @@
 		log << TestLog::Message << descriptorIndexingProperties[0] << TestLog::EndMessage;
 	if (khr_sampler_filter_minmax)
 		log << TestLog::Message << samplerFilterMinmaxProperties[0] << TestLog::EndMessage;
+	if (khr_integer_dot_product)
+		log << TestLog::Message << integerDotProductProperties[0] << TestLog::EndMessage;
 
 	if ( khr_external_fence_capabilities || khr_external_memory_capabilities || khr_external_semaphore_capabilities )
 	{
@@ -4311,6 +4319,41 @@
 		TCU_FAIL("Mismatch between VkPhysicalDeviceSamplerFilterMinmaxProperties");
 	}
 
+	if (khr_integer_dot_product &&
+		(integerDotProductProperties[0].integerDotProduct8BitUnsignedAccelerated										!= integerDotProductProperties[1].integerDotProduct8BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct8BitSignedAccelerated											!= integerDotProductProperties[1].integerDotProduct8BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct8BitMixedSignednessAccelerated									!= integerDotProductProperties[1].integerDotProduct8BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct4x8BitPackedUnsignedAccelerated								!= integerDotProductProperties[1].integerDotProduct4x8BitPackedUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct4x8BitPackedSignedAccelerated									!= integerDotProductProperties[1].integerDotProduct4x8BitPackedSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct4x8BitPackedMixedSignednessAccelerated							!= integerDotProductProperties[1].integerDotProduct4x8BitPackedMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct16BitUnsignedAccelerated										!= integerDotProductProperties[1].integerDotProduct16BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct16BitSignedAccelerated											!= integerDotProductProperties[1].integerDotProduct16BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct16BitMixedSignednessAccelerated								!= integerDotProductProperties[1].integerDotProduct16BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct32BitUnsignedAccelerated										!= integerDotProductProperties[1].integerDotProduct32BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct32BitSignedAccelerated											!= integerDotProductProperties[1].integerDotProduct32BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct32BitMixedSignednessAccelerated								!= integerDotProductProperties[1].integerDotProduct32BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct64BitUnsignedAccelerated										!= integerDotProductProperties[1].integerDotProduct64BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct64BitSignedAccelerated											!= integerDotProductProperties[1].integerDotProduct64BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProduct64BitMixedSignednessAccelerated								!= integerDotProductProperties[1].integerDotProduct64BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating8BitUnsignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating8BitSignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating8BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated			!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated			!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated			!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated	!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating16BitUnsignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating16BitSignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating16BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated			!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating32BitUnsignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating32BitSignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating32BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated			!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating64BitUnsignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating64BitSignedAccelerated					!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating64BitSignedAccelerated ||
+		 integerDotProductProperties[0].integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated			!= integerDotProductProperties[1].integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated))
+	{
+		TCU_FAIL("Mismatch between VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR");
+	}
+
 	if (isExtensionSupported(properties, RequiredExtension("VK_KHR_push_descriptor")))
 	{
 		VkPhysicalDevicePushDescriptorPropertiesKHR		pushDescriptorProperties[count];
diff --git a/external/vulkancts/modules/vulkan/geometry/vktGeometryTestsUtil.cpp b/external/vulkancts/modules/vulkan/geometry/vktGeometryTestsUtil.cpp
index 709e21d..d93a268 100644
--- a/external/vulkancts/modules/vulkan/geometry/vktGeometryTestsUtil.cpp
+++ b/external/vulkancts/modules/vulkan/geometry/vktGeometryTestsUtil.cpp
@@ -418,7 +418,7 @@
 	tcu::ImageIO::loadPNG(referenceImage, context.getTestContext().getArchive(), fileName.c_str());
 
 	if (tcu::fuzzyCompare(context.getTestContext().getLog(), "ImageComparison", "Image Comparison",
-								referenceImage.getAccess(), resultImage, 0.001f, tcu::COMPARE_LOG_RESULT))
+								referenceImage.getAccess(), resultImage, 0.0015f, tcu::COMPARE_LOG_RESULT))
 		return tcu::intThresholdPositionDeviationCompare(context.getTestContext().getLog(), "ImageComparison", "Image Comparison",
 														referenceImage.getAccess(), resultImage, tcu::UVec4(1u, 1u, 1u, 1u), tcu::IVec3(2,2,2), false, tcu::COMPARE_LOG_RESULT);
 	else
diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
index f12ecb9..d204ad1 100644
--- a/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
+++ b/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp
@@ -366,12 +366,6 @@
 		const VkDeviceSize		allocationSize	= (m_config.memorySize ? memReqs.size : (VkDeviceSize)(*m_config.memoryPercentage * (float)memoryHeap.size));
 		const VkDeviceSize		roundedUpAllocationSize	 = roundUpToNextMultiple(allocationSize, m_memoryLimits.deviceMemoryAllocationGranularity);
 		vector<VkDeviceMemory>	memoryObjects	(m_config.memoryAllocationCount, (VkDeviceMemory)0);
-		deUint32				totalAllocateCount		= m_config.memoryAllocationCount;
-		VkResult				result					= vk::VK_SUCCESS;
-		// Because of the size limitation of protect heap, we ignore the "VK_ERROR_OUT_OF_DEVICE_MEMORY"
-		// when total number of protected memory reaches 80 times.
-		const deUint32			protectHeapLimit		= 80;
-
 
 		log << TestLog::Message << "Memory type index: " << m_memoryTypeIndex << TestLog::EndMessage;
 
@@ -412,7 +406,7 @@
 						{
 							for (size_t ndx = 0; ndx < m_config.memoryAllocationCount; ndx++)
 							{
-								VkMemoryAllocateInfo alloc =
+								VkMemoryAllocateInfo	alloc	=
 								{
 									VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,				// sType
 									m_useDeviceGroups ? &m_allocFlagsInfo : DE_NULL,	// pNext
@@ -420,40 +414,43 @@
 									m_memoryTypeIndex									// memoryTypeIndex;
 								};
 
-								result = vkd.allocateMemory(device, &alloc, (const VkAllocationCallbacks*)DE_NULL, &memoryObjects[ndx]);
-								if ( VK_ERROR_OUT_OF_DEVICE_MEMORY == result &&
-								    (memoryType.propertyFlags & vk::VK_MEMORY_PROPERTY_PROTECTED_BIT) == vk::VK_MEMORY_PROPERTY_PROTECTED_BIT &&
-								    ndx >= protectHeapLimit)
-								{
-									totalAllocateCount = (deUint32)ndx + 1;
+								VkResult				res		= vkd.allocateMemory(device, &alloc, (const VkAllocationCallbacks*)DE_NULL, &memoryObjects[ndx]);
+
+								// Some implementations might have limitations on protected heap, and these limitations
+								// don't show up in Vulkan queries. Use a hard coded threshold after which out of memory
+								// is allowed.
+								if (res == VK_ERROR_OUT_OF_DEVICE_MEMORY && memoryType.propertyFlags & vk::VK_MEMORY_PROPERTY_PROTECTED_BIT && ndx > 80)
 									break;
-								}
-								else
-								{
-									VK_CHECK(result);
-								}
+
+								VK_CHECK(res);
 
 								TCU_CHECK(!!memoryObjects[ndx]);
 							}
 
 							if (m_config.order == TestConfig::ALLOC_FREE)
 							{
-								for (size_t ndx = 0; ndx < totalAllocateCount; ndx++)
+								for (size_t ndx = 0; ndx < m_config.memoryAllocationCount; ndx++)
 								{
-									const VkDeviceMemory mem = memoryObjects[totalAllocateCount - 1 - ndx];
+									const VkDeviceMemory mem = memoryObjects[memoryObjects.size() - 1 - ndx];
 
-									vkd.freeMemory(device, mem, (const VkAllocationCallbacks*)DE_NULL);
-									memoryObjects[totalAllocateCount - 1 - ndx] = (VkDeviceMemory)0;
+									if (!!mem)
+									{
+										vkd.freeMemory(device, mem, (const VkAllocationCallbacks *) DE_NULL);
+										memoryObjects[memoryObjects.size() - 1 - ndx] = (VkDeviceMemory) 0;
+									}
 								}
 							}
 							else
 							{
-								for (size_t ndx = 0; ndx < totalAllocateCount; ndx++)
+								for (size_t ndx = 0; ndx < m_config.memoryAllocationCount; ndx++)
 								{
 									const VkDeviceMemory mem = memoryObjects[ndx];
 
-									vkd.freeMemory(device, mem, (const VkAllocationCallbacks*)DE_NULL);
-									memoryObjects[ndx] = (VkDeviceMemory)0;
+									if (!!mem)
+									{
+										vkd.freeMemory(device, mem, (const VkAllocationCallbacks *) DE_NULL);
+										memoryObjects[ndx] = (VkDeviceMemory) 0;
+									}
 								}
 							}
 						}
diff --git a/external/vulkancts/modules/vulkan/modifiers/vktModifiersTests.cpp b/external/vulkancts/modules/vulkan/modifiers/vktModifiersTests.cpp
index 9b9621e..4d6bcd2 100644
--- a/external/vulkancts/modules/vulkan/modifiers/vktModifiersTests.cpp
+++ b/external/vulkancts/modules/vulkan/modifiers/vktModifiersTests.cpp
@@ -39,10 +39,14 @@
 #include "tcuTextureUtil.hpp"
 #include "tcuImageIO.hpp"
 #include "tcuImageCompare.hpp"
+#include "tcuMaybe.hpp"
 #include "deUniquePtr.hpp"
 #include "deStringUtil.hpp"
 
 #include <string>
+#include <vector>
+#include <algorithm>
+#include <iterator>
 
 namespace vkt
 {
@@ -99,15 +103,16 @@
 	return drmFormatModifiers;
 }
 
-VkImageFormatProperties2 verifyHandleTypeForFormatModifier (const InstanceInterface&	vki,
-															  VkPhysicalDevice			physicalDevice,
-															  const VkFormat			format,
-															  const VkImageType			imageType,
-															  const VkImageUsageFlags	imageUsages,
-															  const VkExternalMemoryHandleTypeFlags handleType,
-															  const deUint64			drmFormatModifier)
+// Returns true if the image with the given parameters and modifiers supports the given handle type.
+bool verifyHandleTypeForFormatModifier (const InstanceInterface&				vki,
+									    VkPhysicalDevice						physicalDevice,
+									    const VkFormat							format,
+									    const VkImageType						imageType,
+									    const VkImageUsageFlags					imageUsages,
+									    const VkExternalMemoryHandleTypeFlags	handleType,
+									    const deUint64							drmFormatModifier)
 {
-	const VkPhysicalDeviceImageDrmFormatModifierInfoEXT	imageFormatModifierInfo	=
+	const VkPhysicalDeviceImageDrmFormatModifierInfoEXT imageFormatModifierInfo =
 	{
 		VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT,
 		DE_NULL,
@@ -116,13 +121,15 @@
 		0,
 		DE_NULL,
 	};
+
 	const VkPhysicalDeviceExternalImageFormatInfo externalImageFormatInfo =
 	{
 		VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
 		&imageFormatModifierInfo,
 		(VkExternalMemoryHandleTypeFlagBits)handleType,
 	};
-	const VkPhysicalDeviceImageFormatInfo2				imageFormatInfo			=
+
+	const VkPhysicalDeviceImageFormatInfo2 imageFormatInfo =
 	{
 		VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,
 		&externalImageFormatInfo,
@@ -132,25 +139,49 @@
 		imageUsages,
 		0,
 	};
-	VkExternalImageFormatProperties	externalImageProperties;
-	deMemset(&externalImageProperties, 0, sizeof(externalImageProperties));
-	externalImageProperties.sType = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES;
-	externalImageProperties.sType = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES;
 
-	VkImageFormatProperties2							imageProperties;
-	deMemset(&imageProperties, 0, sizeof(imageProperties));
-	imageProperties.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
-	imageProperties.pNext = &externalImageProperties;
+	VkExternalImageFormatProperties	externalImageProperties	= initVulkanStructure();
+	VkImageFormatProperties2		imageProperties			= initVulkanStructure(&externalImageProperties);
+
 	if (vki.getPhysicalDeviceImageFormatProperties2(physicalDevice, &imageFormatInfo, &imageProperties) == VK_ERROR_FORMAT_NOT_SUPPORTED)
-	{
-		TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers");
-	};
+		return false;
+
 	if ((externalImageProperties.externalMemoryProperties.compatibleHandleTypes & handleType) != handleType)
+		return false;
+
+	return true;
+}
+
+std::vector<deUint64> getExportImportCompatibleModifiers (Context& context, VkFormat format)
+{
+	const auto&				vki					= context.getInstanceInterface();
+	const auto				drmFormatModifiers	= getDrmFormatModifiers(vki, context.getPhysicalDevice(), format);
+	std::vector<deUint64>	compatibleModifiers;
+
+	if (drmFormatModifiers.empty())
+		return compatibleModifiers;
+
+	const VkFormatFeatureFlags testFeatures = (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT);
+
+	for (const auto& modifierProps : drmFormatModifiers)
 	{
-		TCU_THROW(NotSupportedError, de::toString(format) + " does not support the expected memory handle type");
+		if ((modifierProps.drmFormatModifierTilingFeatures & testFeatures) != testFeatures)
+			continue;
+
+		const auto&	modifier	= modifierProps.drmFormatModifier;
+		const auto	supported	= verifyHandleTypeForFormatModifier(vki, context.getPhysicalDevice(), format,
+																	VK_IMAGE_TYPE_2D,
+																	(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT),
+																	VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
+																	modifier);
+
+		if (!supported)
+			continue;
+
+		compatibleModifiers.push_back(modifier);
 	}
 
-	return imageProperties;
+	return compatibleModifiers;
 }
 
 void checkExportImportExtensions (Context& context, VkFormat format)
@@ -179,29 +210,11 @@
 
 	if (!context.isDeviceFunctionalitySupported("VK_KHR_external_memory_fd"))
 		TCU_THROW(NotSupportedError, "VK_KHR_external_memory_fd not supported");
+
 	checkModifiersSupported(context, format);
 
-	const InstanceInterface&						vki					= context.getInstanceInterface();
-	std::vector<VkDrmFormatModifierPropertiesEXT>	drmFormatModifiers	= getDrmFormatModifiers(vki, context.getPhysicalDevice(), format);
-
-	if (drmFormatModifiers.size() < 1)
-		TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers");
-	bool												featureCompatible				= false;
-	for (deUint32 m = 0; m < drmFormatModifiers.size(); m++)
-	{
-		const VkFormatFeatureFlags							testFeatures		= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
-		if ((drmFormatModifiers[m].drmFormatModifierTilingFeatures & testFeatures) != testFeatures)
-			continue;
-		verifyHandleTypeForFormatModifier(vki, context.getPhysicalDevice(), format,
-																			VK_IMAGE_TYPE_2D,
-																			VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
-																			VK_IMAGE_USAGE_SAMPLED_BIT,
-																			VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
-																			drmFormatModifiers[m].drmFormatModifier);
-
-		featureCompatible = true;
-	}
-	if (!featureCompatible)
+	const auto compatibleModifiers = getExportImportCompatibleModifiers(context, format);
+	if (compatibleModifiers.empty())
 		TCU_THROW(NotSupportedError, "Could not find a format modifier supporting required transfer features for " + de::toString(format));
 }
 
@@ -251,19 +264,21 @@
 	TestLog&										log					= context.getTestContext().getLog();
 	const InstanceInterface&						vki					= context.getInstanceInterface();
 	std::vector<VkDrmFormatModifierPropertiesEXT>	drmFormatModifiers	= getDrmFormatModifiers(vki, context.getPhysicalDevice(), format);
+	bool											noneCompatible		= true;
 
-	if (drmFormatModifiers.size() < 1)
+	if (drmFormatModifiers.empty())
 		TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers");
 
 	for (deUint32 m = 0; m < drmFormatModifiers.size(); m++) {
 		VkImageFormatProperties2	imageProperties {};
-		deBool	isCompatible	= isModifierCompatibleWithImageProperties(vki, context.getPhysicalDevice(),
-																		  &format, 1u, VK_IMAGE_TYPE_2D,
-																		  VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
-																		  drmFormatModifiers[m].drmFormatModifier, imageProperties);
+		deBool						isCompatible	= isModifierCompatibleWithImageProperties(vki, context.getPhysicalDevice(),
+																							  &format, 1u, VK_IMAGE_TYPE_2D,
+																							  (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT),
+																							  drmFormatModifiers[m].drmFormatModifier, imageProperties);
 
 		if (!isCompatible)
-			TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers");
+			continue;
+		noneCompatible = false;
 
 		TCU_CHECK(imageProperties.imageFormatProperties.maxExtent.width >= 1 && imageProperties.imageFormatProperties.maxExtent.height >= 1);
 		TCU_CHECK(imageProperties.imageFormatProperties.maxArrayLayers >= 1);
@@ -275,6 +290,9 @@
 			<< TestLog::EndMessage;
 	}
 
+	if (noneCompatible)
+		TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers for the requested image features");
+
 	return tcu::TestStatus::pass("OK");
 }
 
@@ -306,14 +324,14 @@
 	return createImage(vkd, device, &createInfo);
 }
 
-Move<VkImage> createImageWithDrmFormatModifiers (const DeviceInterface&			vkd,
-												 const VkDevice					device,
-												 const VkImageType				imageType,
-												 const VkImageUsageFlags		imageUsages,
-												 const VkExternalMemoryHandleTypeFlags		externalMemoryHandleTypeFlags,
-												 const std::vector<VkFormat>					formats,
-												 const UVec2&					size,
-												 const std::vector<deUint64>&	drmFormatModifiers)
+Move<VkImage> createImageWithDrmFormatModifiers (const DeviceInterface&					vkd,
+												 const VkDevice							device,
+												 const VkImageType						imageType,
+												 const VkImageUsageFlags				imageUsages,
+												 const VkExternalMemoryHandleTypeFlags	externalMemoryHandleTypeFlags,
+												 const std::vector<VkFormat>&			formats,
+												 const UVec2&							size,
+												 const std::vector<deUint64>&			drmFormatModifiers)
 {
 	const VkImageDrmFormatModifierListCreateInfoEXT	modifierListCreateInfo =
 	{
@@ -373,50 +391,44 @@
 	const VkDevice									device				= context.getDevice();
 	std::vector<VkDrmFormatModifierPropertiesEXT>	drmFormatModifiers	= getDrmFormatModifiers(vki, context.getPhysicalDevice(), format);
 
-	if (drmFormatModifiers.size() < 1)
+	if (drmFormatModifiers.empty())
 		TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers");
 
-	for (deUint32 modifierNdx = 0; modifierNdx < drmFormatModifiers.size(); modifierNdx++) {
-		VkImageDrmFormatModifierPropertiesEXT	properties;
-		std::vector<deUint64>					modifiers;
-		bool									found		= false;
+	// Get the list of modifiers supported for some specific image parameters.
+	std::vector<deUint64> modifiers;
 
-		deMemset(&properties, 0, sizeof(properties));
-		properties.sType = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT;
+	for (const auto& modProps : drmFormatModifiers)
+	{
+		VkImageFormatProperties2	imgFormatProperties	= initVulkanStructure();
+		const auto					isCompatible		= isModifierCompatibleWithImageProperties(vki, context.getPhysicalDevice(), &format, 1u, VK_IMAGE_TYPE_2D,
+																								  (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT),
+																								  modProps.drmFormatModifier, imgFormatProperties);
+		if (isCompatible)
+			modifiers.push_back(modProps.drmFormatModifier);
+	}
 
-		for (deUint32 m = 0; m <= modifierNdx; m++)
-		{
-			VkImageFormatProperties2 imgFormatProperties {};
-			deBool isCompatible	= isModifierCompatibleWithImageProperties(vki, context.getPhysicalDevice(), &format, 1u, VK_IMAGE_TYPE_2D,
-																		  VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
-																		  drmFormatModifiers[m].drmFormatModifier, imgFormatProperties);
-			if (isCompatible)
-				modifiers.push_back(drmFormatModifiers[m].drmFormatModifier);
-		}
+	if (modifiers.empty())
+		TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers for the requested image features");
 
-		if (modifiers.empty())
-			TCU_THROW(NotSupportedError, de::toString(format) + " does not support any DRM modifiers");
+	// Test with lists of compatible modifiers of increasing lengths.
+	for (size_t len = 1u; len <= modifiers.size(); ++len)
+	{
+		std::vector<deUint64> creationModifiers;
+		creationModifiers.reserve(len);
+		std::copy_n(begin(modifiers), len, std::back_inserter(creationModifiers));
+
+		VkImageDrmFormatModifierPropertiesEXT	properties	= initVulkanStructure();
 
 		{
-			Move<VkImage>						image		(createImageWithDrmFormatModifiers(vkd, device, VK_IMAGE_TYPE_2D,
-																								 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
-																								 VK_IMAGE_USAGE_SAMPLED_BIT,
-																								 0,
-																								 {format}, UVec2(64, 64), modifiers));
-
+			std::vector<VkFormat>	formats	(1u, format);
+			const auto				image	= createImageWithDrmFormatModifiers(vkd, device, VK_IMAGE_TYPE_2D,
+																				(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT),
+																				0, formats, UVec2(64, 64), creationModifiers);
 
 			VK_CHECK(vkd.getImageDrmFormatModifierPropertiesEXT(device, *image, &properties));
 		}
 
-		for (deUint32 m = 0; m < modifiers.size(); m++)
-		{
-			if (properties.drmFormatModifier == modifiers[m]) {
-				found = true;
-				break;
-			}
-		}
-
-		if (!found)
+		if (!de::contains(begin(creationModifiers), end(creationModifiers), properties.drmFormatModifier))
 			return tcu::TestStatus::fail("Image created with modifier not specified in the create list");
 	}
 
@@ -437,21 +449,24 @@
 	return -1;
 }
 
-bool exportImportMemoryExplicitModifiersCase (Context& context, const VkFormat format, const VkDrmFormatModifierPropertiesEXT& modifier)
+bool exportImportMemoryExplicitModifiersCase (Context& context, const VkFormat format, deUint64 modifier)
 {
 	const InstanceInterface&						vki					= context.getInstanceInterface();
 	const DeviceInterface&							vkd					= context.getDeviceInterface();
 	const VkDevice									device				= context.getDevice();
 
 
-	verifyHandleTypeForFormatModifier(vki, context.getPhysicalDevice(), format,
-																		VK_IMAGE_TYPE_2D,
-																		VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
-																		VK_IMAGE_USAGE_SAMPLED_BIT,
-																		VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
-																		modifier.drmFormatModifier);
+	const auto supported = verifyHandleTypeForFormatModifier(vki, context.getPhysicalDevice(), format,
+															 VK_IMAGE_TYPE_2D,
+															 (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT),
+															 VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
+															 modifier);
+
+	if (!supported)
+		TCU_FAIL("Modifier " + de::toString(modifier) + " for format " + de::toString(format) + " expected to be compatible");
+
 	std::vector<deUint64>					modifiers;
-	modifiers.push_back(modifier.drmFormatModifier);
+	modifiers.push_back(modifier);
 
 
 	const UVec2									imageSize		(64, 64);
@@ -683,15 +698,14 @@
 
 tcu::TestStatus exportImportMemoryExplicitModifiersCase (Context& context, const VkFormat format)
 {
-	const InstanceInterface&						vki					= context.getInstanceInterface();
-	std::vector<VkDrmFormatModifierPropertiesEXT>	drmFormatModifiers	= getDrmFormatModifiers(vki, context.getPhysicalDevice(), format);
+	const auto compatibleModifiers = getExportImportCompatibleModifiers(context, format);
 
-	for (deUint32 m = 0; m < drmFormatModifiers.size(); m++)
+	if (compatibleModifiers.empty())
+		TCU_FAIL("Expected non-empty list of compatible modifiers for the given format");
+
+	for (const auto& modifier : compatibleModifiers)
 	{
-		const VkFormatFeatureFlags							testFeatures		= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
-		if ((drmFormatModifiers[m].drmFormatModifierTilingFeatures & testFeatures) != testFeatures)
-			continue;
-		if (!exportImportMemoryExplicitModifiersCase(context, format, drmFormatModifiers[m]))
+		if (!exportImportMemoryExplicitModifiersCase(context, format, modifier))
 			return tcu::TestStatus::fail("Unexpected copy image result");
 	}
 
diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
index 607501b..d3e1cba 100644
--- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
+++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp
@@ -3621,7 +3621,7 @@
 		"vertex_shader",
 		"fragment_shader",
 		"geometry_shader",
-		"tesellation_shader",
+		"tessellation_shader",
 		"input_attachments",
 		"input_attachments_geometry",
 		"instanced",
diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemStorageBufferTests.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemStorageBufferTests.cpp
index 6f8113f..8b02f46 100644
--- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemStorageBufferTests.cpp
+++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemStorageBufferTests.cpp
@@ -117,24 +117,25 @@
 							  deUint32						queueFamilyIndex,
 							  vk::VkBuffer					srcBuffer,
 							  vk::VkBuffer					dstBuffer,
-							  deUint32						copySize)
+							  deUint32						copySize,
+							  bool							dstFragment)
 {
 	const vk::VkBufferMemoryBarrier		dstWriteStartBarrier	=
 	{
 		vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,		// VkStructureType		sType
 		DE_NULL,											// const void*			pNext
-		0,													// VkAccessFlags		srcAccessMask
+		vk::VK_ACCESS_HOST_WRITE_BIT,						// VkAccessFlags		srcAccessMask
 		vk::VK_ACCESS_SHADER_WRITE_BIT,						// VkAccessFlags		dstAccessMask
 		queueFamilyIndex,									// uint32_t				srcQueueFamilyIndex
 		queueFamilyIndex,									// uint32_t				dstQueueFamilyIndex
-		dstBuffer,											// VkBuffer				buffer
+		srcBuffer,											// VkBuffer				buffer
 		0u,													// VkDeviceSize			offset
 		VK_WHOLE_SIZE,										// VkDeviceSize			size
 	};
 
 	vk.cmdPipelineBarrier(cmdBuffer,
-						  vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,	// srcStageMask
-						  vk::VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,	// dstStageMask
+						  vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // srcStageMask
+						  vk::VK_PIPELINE_STAGE_TRANSFER_BIT,	 // dstStageMask
 						  (vk::VkDependencyFlags)0,
 						  0, (const vk::VkMemoryBarrier*)DE_NULL,
 						  1, &dstWriteStartBarrier,
@@ -160,9 +161,11 @@
 		0u,													// VkDeviceSize			offset
 		VK_WHOLE_SIZE,										// VkDeviceSize			size
 	};
+
 	vk.cmdPipelineBarrier(cmdBuffer,
-						  vk::VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,		// srcStageMask
-						  vk::VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,	// dstStageMask
+						  vk::VK_PIPELINE_STAGE_TRANSFER_BIT,			// srcStageMask
+						  dstFragment ? vk::VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT :
+						  vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,	// dstStageMask
 						  (vk::VkDependencyFlags)0,
 						  0, (const vk::VkMemoryBarrier*)DE_NULL,
 						  1, &dstWriteEndBarrier,
@@ -452,7 +455,7 @@
 	if (m_testType == SSBO_READ || m_testType == SSBO_ATOMIC)
 	{
 		vk::VkBuffer targetBuffer = (m_testType == SSBO_ATOMIC) ? **testBuffer : **testBufferSource;
-		addBufferCopyCmd(vk, *cmdBuffer, queueFamilyIndex, **testUniform, targetBuffer, testUniformSize);
+		addBufferCopyCmd(vk, *cmdBuffer, queueFamilyIndex, **testUniform, targetBuffer, testUniformSize, true);
 	}
 
 	// Start image barrier
@@ -612,7 +615,6 @@
 			.update(vk, device);
 	}
 
-
 	// Build and execute test
 	{
 		const vk::Unique<vk::VkFence>		fence				(vk::createFence(vk, device));
@@ -627,7 +629,7 @@
 		if (m_testType == SSBO_READ || m_testType == SSBO_ATOMIC)
 		{
 			vk::VkBuffer targetBuffer = (m_testType == SSBO_ATOMIC) ? **testBuffer : **testBufferSource;
-			addBufferCopyCmd(vk, *cmdBuffer, queueFamilyIndex, **testUniform, targetBuffer, testUniformSize);
+			addBufferCopyCmd(vk, *cmdBuffer, queueFamilyIndex, **testUniform, targetBuffer, testUniformSize, false);
 		}
 
 		vk.cmdBindPipeline(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *SSBOPipeline);
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp
index 9d77014..573a831 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryAccelerationStructuresTests.cpp
@@ -1554,6 +1554,18 @@
 			TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
 	}
 
+	switch (m_data.shaderSourceType)
+	{
+	case SST_VERTEX_SHADER:
+	case SST_TESSELATION_CONTROL_SHADER:
+	case SST_TESSELATION_EVALUATION_SHADER:
+	case SST_GEOMETRY_SHADER:
+		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS);
+		break;
+	default:
+		break;
+	}
+
 	const VkPhysicalDeviceAccelerationStructureFeaturesKHR&	accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
 	if (m_data.buildType == VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR && accelerationStructureFeaturesKHR.accelerationStructureHostCommands == DE_FALSE)
 		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands");
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryCullRayFlagsTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryCullRayFlagsTests.cpp
index a383e54..ada6059 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryCullRayFlagsTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryCullRayFlagsTests.cpp
@@ -1221,6 +1221,18 @@
 		features2.features.geometryShader == DE_FALSE )
 		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceFeatures2.geometryShader");
 
+	switch (m_data.shaderSourceType)
+	{
+	case SST_VERTEX_SHADER:
+	case SST_TESSELATION_CONTROL_SHADER:
+	case SST_TESSELATION_EVALUATION_SHADER:
+	case SST_GEOMETRY_SHADER:
+		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS);
+		break;
+	default:
+		break;
+	}
+
 	if ( m_data.shaderSourceType == SST_RAY_GENERATION_SHADER ||
 		 m_data.shaderSourceType == SST_INTERSECTION_SHADER ||
 		 m_data.shaderSourceType == SST_ANY_HIT_SHADER ||
diff --git a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTraversalControlTests.cpp b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTraversalControlTests.cpp
index e36d68a..d51f05f 100644
--- a/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTraversalControlTests.cpp
+++ b/external/vulkancts/modules/vulkan/ray_query/vktRayQueryTraversalControlTests.cpp
@@ -1278,6 +1278,18 @@
 		features2.features.geometryShader == DE_FALSE )
 		TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceFeatures2.geometryShader");
 
+	switch (m_data.shaderSourceType)
+	{
+	case SST_VERTEX_SHADER:
+	case SST_TESSELATION_CONTROL_SHADER:
+	case SST_TESSELATION_EVALUATION_SHADER:
+	case SST_GEOMETRY_SHADER:
+		context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS);
+		break;
+	default:
+		break;
+	}
+
 	if (m_data.shaderSourceType == SST_RAY_GENERATION_SHADER ||
 		m_data.shaderSourceType == SST_INTERSECTION_SHADER ||
 		m_data.shaderSourceType == SST_ANY_HIT_SHADER ||
diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.hpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.hpp
index 3d6c4ac..d2346e0 100644
--- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.hpp
+++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsBase.hpp
@@ -180,6 +180,7 @@
 
 	typedef de::SharedPtr< vk::Unique<vk::VkPipeline> >			SharedVkPipeline;
 	std::vector<SharedVkPipeline>								pipelines;
+	vk::Move<vk::VkPipelineLayout>								pipelineLayout;
 
 	typedef de::SharedPtr< vk::Unique<vk::VkImageView> >		SharedVkImageView;
 	std::vector<SharedVkImageView>								imageSparseViews;
diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsSampled.cpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsSampled.cpp
index c9ef0b8..e392a04 100755
--- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsSampled.cpp
+++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsSampled.cpp
@@ -734,7 +734,7 @@
 		&lodConstantRange,									// const VkPushConstantRange*		pPushConstantRanges;
 	};
 
-	const Unique<VkPipelineLayout> pipelineLayout(createPipelineLayout(deviceInterface, getDevice(), &pipelineLayoutParams));
+	pipelineLayout = createPipelineLayout(deviceInterface, getDevice(), &pipelineLayoutParams);
 
 	// Create graphics pipeline
 	{
diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsStorage.cpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsStorage.cpp
index 089b9d0..d6ddda5 100644
--- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsStorage.cpp
+++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesShaderIntrinsicsStorage.cpp
@@ -407,7 +407,7 @@
 	const Unique<VkDescriptorSetLayout> descriptorSetLayout(descriptorLayerBuilder.build(deviceInterface, getDevice()));
 
 	// Create pipeline layout
-	const Unique<VkPipelineLayout> pipelineLayout(makePipelineLayout(deviceInterface, getDevice(), *descriptorSetLayout));
+	pipelineLayout = makePipelineLayout(deviceInterface, getDevice(), *descriptorSetLayout);
 
 	// Create descriptor pool
 	DescriptorPoolBuilder descriptorPoolBuilder;
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt b/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
index c542c6e..aa6c0d8 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
@@ -75,6 +75,8 @@
 	vktSpvAsmFloatControlsExtensionlessTests.hpp
 	vktSpvAsmTrinaryMinMaxTests.cpp
 	vktSpvAsmTrinaryMinMaxTests.hpp
+	vktSpvAsmIntegerDotProductTests.cpp
+	vktSpvAsmIntegerDotProductTests.hpp
 	)
 
 set(DEQP_VK_SPIRV_ASSEMBLY_LIBS
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
index 4dad8c7..61b0d90 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
@@ -4054,7 +4054,6 @@
 		"                             OpDecorate %gl_PerVertex Block\n"
 		"                             OpDecorate %position Location 0\n"
 		"                             OpDecorate %vtxColor Location 1\n"
-		"                             OpDecorate %dataIn Binding 1\n"
 		"                             OpDecorate %dataIn Location 2\n"
 		"                             OpDecorate %color Location 1\n"
 		"                             OpDecorate %dataOut0 Location 2\n"
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp
index ff0e85f..90ab988 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp
@@ -4610,9 +4610,12 @@
 						// Note: RTZ/RNE rounding leniency isn't applied for the checks below:
 
 						// Some *variable_pointers* tests store counters in buffer
-						// whose value may vary if the same vertex shader may be executed for multiple times
+						// whose value may vary if the same shader may be executed for multiple times
 						// in this case the output value can be expected value + non-negative integer N
-						if (instance.customizedStages == VK_SHADER_STAGE_VERTEX_BIT)
+						if (instance.customizedStages == VK_SHADER_STAGE_VERTEX_BIT ||
+							instance.customizedStages == VK_SHADER_STAGE_GEOMETRY_BIT ||
+							instance.customizedStages == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT ||
+							instance.customizedStages == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
 						{
 							if (deFloatIsInf(outputFloats[expectedNdx]) || deFloatIsNaN(outputFloats[expectedNdx]))
 								return tcu::TestStatus::fail("Value returned is invalid");
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
index b8b65bc..5ee6ba9 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
@@ -85,6 +85,7 @@
 #include "vktSpvAsm64bitCompareTests.hpp"
 #include "vktSpvAsmTrinaryMinMaxTests.hpp"
 #include "vktSpvAsmTerminateInvocationTests.hpp"
+#include "vktSpvAsmIntegerDotProductTests.hpp"
 
 #include <cmath>
 #include <limits>
@@ -9755,12 +9756,12 @@
 	fragments["pre_main"] =
 		"%Workgroup = OpConstant %i32 2\n"
 		"%Invocation = OpConstant %i32 4\n"
-		"%WorkgroupAcquireRelease = OpConstant %i32 0x108\n";
+		"%MemorySemanticsNone = OpConstant %i32 0\n";
 	fragments["testfun"] =
 		"%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
 		"%param1 = OpFunctionParameter %v4f32\n"
 		"%label_testfun = OpLabel\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"OpReturnValue %param1\n"
 		"OpFunctionEnd\n";
 	addTessCtrlTest(testGroup.get(), "in_function", fragments);
@@ -9769,7 +9770,7 @@
 	fragments["pre_main"] =
 		"%Workgroup = OpConstant %i32 2\n"
 		"%Invocation = OpConstant %i32 4\n"
-		"%WorkgroupAcquireRelease = OpConstant %i32 0x108\n"
+		"%MemorySemanticsNone = OpConstant %i32 0\n"
 		"%c_f32_5 = OpConstant %f32 5.\n";
 	const string setupPercentZero =	 // Begins %test_code function with code that sets %zero to 0u but cannot be optimized away.
 		"%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
@@ -9788,18 +9789,18 @@
 
 		"%case1 = OpLabel\n"
 		";This barrier should never be executed, but its presence makes test failure more likely when there's a bug.\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"%wrong_branch_alert1 = OpVectorInsertDynamic %v4f32 %param1 %c_f32_0_5 %c_i32_0\n"
 		"OpBranch %switch_exit\n"
 
 		"%switch_default = OpLabel\n"
 		"%wrong_branch_alert2 = OpVectorInsertDynamic %v4f32 %param1 %c_f32_0_5 %c_i32_0\n"
 		";This barrier should never be executed, but its presence makes test failure more likely when there's a bug.\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"OpBranch %switch_exit\n"
 
 		"%case0 = OpLabel\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"OpBranch %switch_exit\n"
 
 		"%switch_exit = OpLabel\n"
@@ -9817,12 +9818,12 @@
 
 		"%else = OpLabel\n"
 		";This barrier should never be executed, but its presence makes test failure more likely when there's a bug.\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"%wrong_branch_alert = OpVectorInsertDynamic %v4f32 %param1 %c_f32_0_5 %c_i32_0\n"
 		"OpBranch %exit\n"
 
 		"%then = OpLabel\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"OpBranch %exit\n"
 		"%exit = OpLabel\n"
 		"%ret = OpPhi %v4f32 %param1 %then %wrong_branch_alert %else\n"
@@ -9849,7 +9850,7 @@
 
 		"%exit = OpLabel\n"
 		"%val = OpPhi %f32 %val0 %else %val1 %then\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"%ret = OpVectorInsertDynamic %v4f32 %param1 %val %zero\n"
 		"OpReturnValue %ret\n"
 		"OpFunctionEnd\n";
@@ -9859,7 +9860,7 @@
 	fragments["pre_main"] =
 		"%Workgroup = OpConstant %i32 2\n"
 		"%Invocation = OpConstant %i32 4\n"
-		"%WorkgroupAcquireRelease = OpConstant %i32 0x108\n"
+		"%MemorySemanticsNone = OpConstant %i32 0\n"
 		"%c_f32_10 = OpConstant %f32 10.\n";
 	fragments["testfun"] =
 		"%test_code = OpFunction %v4f32 None %v4f32_v4f32_function\n"
@@ -9872,7 +9873,7 @@
 		"%loop = OpLabel\n"
 		"%count = OpPhi %i32 %c_i32_4 %entry %count__ %loop\n"
 		"%val1 = OpPhi %f32 %val0 %entry %val %loop\n"
-		"OpControlBarrier %Workgroup %Invocation %WorkgroupAcquireRelease\n"
+		"OpControlBarrier %Workgroup %Invocation %MemorySemanticsNone\n"
 		"%fcount = OpConvertSToF %f32 %count\n"
 		"%val = OpFAdd %f32 %val1 %fcount\n"
 		"%count__ = OpISub %i32 %count %c_i32_1\n"
@@ -20451,6 +20452,12 @@
 	computeTests->addChild(createOpSRemComputeGroup64(testCtx, QP_TEST_RESULT_PASS));
 	computeTests->addChild(createOpSModComputeGroup(testCtx, QP_TEST_RESULT_PASS));
 	computeTests->addChild(createOpSModComputeGroup64(testCtx, QP_TEST_RESULT_PASS));
+	computeTests->addChild(createOpSDotKHRComputeGroup(testCtx));
+	computeTests->addChild(createOpUDotKHRComputeGroup(testCtx));
+	computeTests->addChild(createOpSUDotKHRComputeGroup(testCtx));
+	computeTests->addChild(createOpSDotAccSatKHRComputeGroup(testCtx));
+	computeTests->addChild(createOpUDotAccSatKHRComputeGroup(testCtx));
+	computeTests->addChild(createOpSUDotAccSatKHRComputeGroup(testCtx));
 	computeTests->addChild(createConvertComputeTests(testCtx, "OpSConvert", "sconvert"));
 	computeTests->addChild(createConvertComputeTests(testCtx, "OpUConvert", "uconvert"));
 	computeTests->addChild(createConvertComputeTests(testCtx, "OpFConvert", "fconvert"));
@@ -20539,6 +20546,7 @@
 
 		graphicsTests->addChild(graphicsAndroidTests.release());
 	}
+
 	graphicsTests->addChild(createOpNameTests(testCtx));
 	graphicsTests->addChild(createOpNameAbuseTests(testCtx));
 	graphicsTests->addChild(createOpMemberNameAbuseTests(testCtx));
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.cpp
new file mode 100644
index 0000000..e2376ea
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.cpp
@@ -0,0 +1,1158 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 Arm Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Functional integer dot product tests
+ *//*--------------------------------------------------------------------*/
+
+
+#include "tcuTestLog.hpp"
+#include "tcuVectorUtil.hpp"
+
+#include "deRandom.hpp"
+
+#include "vktSpvAsmComputeShaderCase.hpp"
+#include "vktSpvAsmComputeShaderTestUtil.hpp"
+#include "vktSpvAsmIntegerDotProductTests.hpp"
+
+#include <limits>
+#include <string>
+
+// VK_KHR_shader_integer_dot_product tests
+
+// Note: these tests make use of the following extensions that are not
+// required by the VK_KHR_shader_integer_dot_product extension itself:
+//    * VK_KHR_8bit_storage (VkPhysicalDevice8BitStorageFeatures) for shaderInt8
+//    * VK_KHR_16bit_storage (VkPhysicalDevice16BitStorageFeatures) for shaderInt16
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+using namespace vk;
+using std::string;
+
+namespace
+{
+using std::vector;
+using tcu::IVec3;
+using tcu::TestLog;
+
+template<typename T>
+static void fillRandomScalars(de::Random& rnd, T minValue, T maxValue, void* dst, int numValues, int offset = 0)
+{
+	T* const typedPtr = (T*)dst;
+	for (int ndx = 0; ndx < numValues; ndx++)
+		typedPtr[offset + ndx] = de::randomScalar<T>(rnd, minValue, maxValue);
+}
+
+template <typename T> T getEqualValue(T v1, T v2)
+{
+	DE_ASSERT(v1 == v2);
+	(void)v2;
+	return v1;
+}
+
+template <class T>
+bool withinLimits(deInt64 val)
+{
+	return static_cast<deInt64>(std::numeric_limits<T>::min()) < val
+		   && val < static_cast<deInt64>(std::numeric_limits<T>::max());
+}
+
+template <class T, class LHSOperandT, class RHSOperandT>
+static T dotProduct(vector<LHSOperandT> lhs, vector<RHSOperandT> rhs)
+{
+	deInt64 res = 0;
+
+	size_t size = getEqualValue(lhs.size(), rhs.size());
+
+	for (size_t i = 0; i < size; ++i)
+	{
+		res += static_cast<deInt64>(lhs[i]) * static_cast<deInt64>(rhs[i]);
+	}
+
+	return static_cast<T>(res);
+}
+
+template <class AddendT, class LHSOperandT, class RHSOperandT>
+bool compareDotProductAccSat(const std::vector<Resource> &inputs, const vector<AllocationSp>& outputAllocs,
+							 const std::vector<Resource>&, TestLog&)
+{
+	if (inputs.size() != 3 || outputAllocs.size() != 1)
+		return false;
+
+	vector<deUint8>	lhsBytes;
+	vector<deUint8>	rhsBytes;
+	vector<deUint8>	addendBytes;
+
+	inputs[0].getBytes(lhsBytes);
+	inputs[1].getBytes(rhsBytes);
+	inputs[2].getBytes(addendBytes);
+
+	const AddendT* const	output	= static_cast<AddendT* const>(outputAllocs[0]->getHostPtr());
+	const AddendT* const	addends	= reinterpret_cast<AddendT* const>(&addendBytes.front());
+	const LHSOperandT* const	lhsInts = reinterpret_cast<LHSOperandT* const>(&lhsBytes.front());
+	const RHSOperandT* const	rhsInts = reinterpret_cast<RHSOperandT* const>(&rhsBytes.front());
+
+	for (size_t idx = 0; idx < inputs[2].getByteSize() / sizeof(AddendT); ++idx)
+	{
+		size_t vecLen = (inputs[0].getByteSize() / sizeof(LHSOperandT)) / (inputs[2].getByteSize() / sizeof(AddendT));
+
+		std::vector<LHSOperandT> inputVec1Pos;
+		std::vector<RHSOperandT> inputVec2Pos;
+		inputVec1Pos.reserve(vecLen);
+		inputVec2Pos.reserve(vecLen);
+
+		std::vector<LHSOperandT> inputVec1Neg;
+		std::vector<RHSOperandT> inputVec2Neg;
+		inputVec1Neg.reserve(vecLen);
+		inputVec2Neg.reserve(vecLen);
+
+		for (unsigned int vecElem = 0; vecElem < vecLen; ++vecElem)
+		{
+			LHSOperandT elem1 = lhsInts[idx * vecLen + vecElem];
+			RHSOperandT elem2 = rhsInts[idx * vecLen + vecElem];
+
+			// Note: ordering of components does not matter, provided
+			// that it is consistent between lhs and rhs.
+			if ((elem1 < 0) == (elem2 < 0))
+			{
+				inputVec1Pos.push_back(elem1);
+				inputVec2Pos.push_back(elem2);
+				inputVec1Neg.push_back(0);
+				inputVec2Neg.push_back(0);
+			}
+			else
+			{
+				inputVec1Pos.push_back(0);
+				inputVec2Pos.push_back(0);
+				inputVec1Neg.push_back(elem1);
+				inputVec2Neg.push_back(elem2);
+			}
+		}
+
+		deInt64 PosProduct = dotProduct<deInt64>(inputVec1Pos, inputVec2Pos);
+		deInt64 NegProduct = dotProduct<deInt64>(inputVec1Neg, inputVec2Neg);
+		bool outputOverflow = (!withinLimits<AddendT>(PosProduct) || !withinLimits<AddendT>(NegProduct));
+
+		if (!outputOverflow)
+		{
+			AddendT expectedOutput = static_cast<AddendT>(PosProduct + NegProduct);
+
+			if (addends[idx] < 0)
+			{
+				if (expectedOutput < std::numeric_limits<AddendT>::min() - addends[idx])
+					expectedOutput = std::numeric_limits<AddendT>::min();
+				else
+					expectedOutput = static_cast<AddendT>(expectedOutput + addends[idx]);
+			}
+			else
+			{
+				if (expectedOutput > std::numeric_limits<AddendT>::max() - addends[idx])
+					expectedOutput = std::numeric_limits<AddendT>::max();
+				else
+					expectedOutput = static_cast<AddendT>(expectedOutput + addends[idx]);
+			}
+
+			if (output[idx] != expectedOutput)
+			{
+				return false;
+			}
+		}
+	}
+
+	return true;
+}
+
+struct DotProductPackingInfo
+{
+	bool packed;
+	bool signedLHS;
+	bool signedRHS;
+};
+
+struct DotProductVectorInfo
+{
+	size_t vecElementSize;
+	unsigned int vecLen;
+};
+
+void addDotProductExtensionAndFeatures(ComputeShaderSpec &spec,
+									   const struct DotProductPackingInfo &packingInfo,
+									   size_t elementSize, size_t outSize)
+{
+	spec.extensions.push_back("VK_KHR_shader_integer_dot_product");
+	spec.requestedVulkanFeatures.extIntegerDotProduct.shaderIntegerDotProduct = VK_TRUE;
+
+	DE_ASSERT(!packingInfo.packed || elementSize == 8);
+	if ((!packingInfo.packed && elementSize == 8) || outSize == 8)
+	{
+		spec.requestedVulkanFeatures.extFloat16Int8 |= EXTFLOAT16INT8FEATURES_INT8;
+		spec.requestedVulkanFeatures.ext8BitStorage = EXT8BITSTORAGEFEATURES_STORAGE_BUFFER;
+		spec.extensions.push_back("VK_KHR_8bit_storage");
+	}
+
+	if (elementSize == 16 || outSize == 16)
+	{
+		spec.requestedVulkanFeatures.coreFeatures.shaderInt16 = VK_TRUE;
+		spec.requestedVulkanFeatures.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
+		spec.extensions.push_back("VK_KHR_16bit_storage");
+	}
+}
+
+const struct DotProductPackingInfo dotProductPacking[] = {
+	{ false, false, false },
+	{ false, false, true  },
+	{ false, true,  false },
+	{ false, true,  true  },
+	{ true,  true,  true  },
+	{ true,  true,  false },
+	{ true,  false, true  },
+	{ true,  false, false },
+};
+
+const struct DotProductVectorInfo dotProductVector8[] = {
+	{ 8, 2 },
+	{ 8, 3 },
+	{ 8, 4 },
+};
+
+const struct DotProductVectorInfo dotProductVector16[] = {
+	{ 16, 2 },
+	{ 16, 3 },
+	{ 16, 4 },
+};
+
+const struct DotProductVectorInfo dotProductVector32[] = {
+	{ 32, 2 },
+	{ 32, 3 },
+	{ 32, 4 },
+};
+
+unsigned int getAlignedVecLen(const DotProductVectorInfo& vectorInfo)
+{
+	return (vectorInfo.vecLen == 3 ? 4 : vectorInfo.vecLen);
+}
+
+void generateIntegerDotProductTypeDeclsAndStrideDecors(std::ostringstream &typeDeclsStream, std::ostringstream &strideDecorsStream,
+													   const struct DotProductPackingInfo &packingInfo,
+													   const struct DotProductVectorInfo &vectorInfo, size_t outSize,
+													   bool signedLHSAndResult, bool signedRHS)
+{
+	size_t signedScalarArraysMask = 0;
+	size_t unsignedScalarArraysMask = 0;
+	bool signedIntVectorNeeded = false;
+	bool unsignedIntVectorNeeded = false;
+
+	if (signedLHSAndResult)
+		signedScalarArraysMask |= static_cast<int>(outSize);
+	else
+		unsignedScalarArraysMask |= static_cast<int>(outSize);
+
+	if (packingInfo.packed)
+	{
+		if (packingInfo.signedLHS || packingInfo.signedRHS)
+			signedScalarArraysMask |= vectorInfo.vecElementSize * vectorInfo.vecLen;
+		if (!packingInfo.signedLHS || !packingInfo.signedRHS)
+			unsignedScalarArraysMask |= vectorInfo.vecElementSize * vectorInfo.vecLen;
+	}
+	else
+	{
+		if (signedLHSAndResult)
+		{
+			signedIntVectorNeeded = true;
+			signedScalarArraysMask |= vectorInfo.vecElementSize;
+		}
+		if (!signedRHS)
+		{
+			unsignedIntVectorNeeded = true;
+			unsignedScalarArraysMask |= vectorInfo.vecElementSize;
+		}
+	}
+
+	size_t signedScalarTypesMask = signedScalarArraysMask;
+	size_t unsignedScalarTypesMask = unsignedScalarArraysMask;
+
+	for (unsigned int size = 8; size <= 64; size *= 2)
+	{
+		if (size != 32)
+		{
+			string sizeStr(de::toString(size));
+			if ((signedScalarTypesMask & size))
+				typeDeclsStream << "%i" << sizeStr << " = OpTypeInt " << sizeStr << " 1\n";
+			if ((unsignedScalarTypesMask & size))
+				typeDeclsStream << "%u" << sizeStr << " = OpTypeInt " << sizeStr << " 0\n";
+		}
+	}
+
+	for (unsigned int size = 8; size <= 64; size *= 2)
+	{
+		string sizeStr = de::toString(size);
+		if ((signedScalarArraysMask & size))
+		{
+			if (size != 32)
+				typeDeclsStream << "%i" << sizeStr << "ptr = OpTypePointer Uniform %i" << sizeStr << "\n"
+								   "%i" << sizeStr << "arr = OpTypeRuntimeArray %i" << sizeStr << "\n";
+			strideDecorsStream << "OpDecorate %i" << sizeStr << "arr ArrayStride " << de::toString(size / 8) << "\n";
+		}
+		if ((unsignedScalarArraysMask & size))
+		{
+			typeDeclsStream << "%u" << sizeStr << "ptr = OpTypePointer Uniform %u" << sizeStr << "\n"
+							   "%u" << sizeStr << "arr = OpTypeRuntimeArray %u" << sizeStr << "\n";
+			strideDecorsStream << "OpDecorate %u" << sizeStr << "arr ArrayStride " << de::toString(size / 8) << "\n";
+		}
+	}
+
+	if (signedIntVectorNeeded)
+	{
+		string vecType = "%i" + de::toString(vectorInfo.vecElementSize) + "vec" + de::toString(vectorInfo.vecLen);
+		typeDeclsStream << vecType << " = OpTypeVector %i" << vectorInfo.vecElementSize << " " << vectorInfo.vecLen << "\n"
+						<< vecType << "ptr = OpTypePointer Uniform " << vecType << "\n"
+						<< vecType << "arr = OpTypeRuntimeArray " << vecType << "\n";
+		strideDecorsStream << "OpDecorate " << vecType << "arr ArrayStride "
+						   << (vectorInfo.vecLen == 3 ? 4 : vectorInfo.vecLen) * (vectorInfo.vecElementSize / 8) << "\n";
+	}
+
+
+	if (unsignedIntVectorNeeded)
+	{
+		string vecType = "%u" + de::toString(vectorInfo.vecElementSize) + "vec" + de::toString(vectorInfo.vecLen);
+		bool changeTypeName = false;
+		if (vectorInfo.vecElementSize == 32 && vectorInfo.vecLen == 3)
+			changeTypeName = true;
+		else
+			typeDeclsStream << vecType << " = OpTypeVector %u" << vectorInfo.vecElementSize << " " << vectorInfo.vecLen << "\n";
+
+		typeDeclsStream << vecType << "ptr = OpTypePointer Uniform " << (changeTypeName ? "%uvec3" : vecType) << "\n"
+						<< vecType << "arr = OpTypeRuntimeArray " << (changeTypeName ? "%uvec3" : vecType) << "\n";
+		strideDecorsStream << "OpDecorate " << vecType << "arr ArrayStride "
+						   << (vectorInfo.vecLen == 3 ? 4 : vectorInfo.vecLen) * (vectorInfo.vecElementSize / 8) << "\n";
+	}
+}
+
+string generateIntegerDotProductCode(const struct DotProductPackingInfo &packingInfo, const struct DotProductVectorInfo &vectorInfo,
+									 size_t outSize, bool signedLHSAndResult, bool signedRHS, bool acc)
+{
+	DE_ASSERT(signedLHSAndResult || !signedRHS);
+
+	const string insnSignedness(signedLHSAndResult ? (signedRHS ? "S" : "SU") : "U");
+	const string insnName(string("Op") + insnSignedness + "Dot" + (acc ? "AccSat" : "") + "KHR");
+
+	const string outputCapability(outSize != 32 ?
+		"OpCapability Int" + de::toString(outSize) + "\n" : "");
+	const string elementCapability(!packingInfo.packed && outSize != vectorInfo.vecElementSize && vectorInfo.vecElementSize != 32 ?
+		"OpCapability Int" + de::toString(vectorInfo.vecElementSize) + "\n" : "");
+
+	const string dotProductInputCapabilityName(
+		packingInfo.packed ? "DotProductInput4x8BitPackedKHR" : (vectorInfo.vecElementSize > 8) ? "DotProductInputAllKHR" : "DotProductInput4x8BitKHR");
+
+	const string capabilities(outputCapability +
+							  elementCapability +
+							  "OpCapability " + dotProductInputCapabilityName + "\n"
+							  "OpCapability DotProductKHR\n");
+	const string extensions("OpExtension \"SPV_KHR_integer_dot_product\"\n");
+
+	const string outType((signedLHSAndResult ? "i" : "u") + de::toString(outSize));
+
+	std::ostringstream typeDeclsStream;
+	std::ostringstream strideDecorsStream;
+	generateIntegerDotProductTypeDeclsAndStrideDecors(typeDeclsStream, strideDecorsStream,
+													  packingInfo, vectorInfo, outSize, signedLHSAndResult, signedRHS);
+	string typeDecls(typeDeclsStream.str());
+	string strideDecors(strideDecorsStream.str());
+
+	const string lhsVecType(packingInfo.packed
+							? string(packingInfo.signedLHS ? "i" : "u") + de::toString(vectorInfo.vecElementSize * vectorInfo.vecLen)
+							: (signedLHSAndResult ? "i" : "u") + ((!signedLHSAndResult && vectorInfo.vecElementSize == 32 && vectorInfo.vecLen == 3) ? "" : de::toString(vectorInfo.vecElementSize)) + "vec" + de::toString(vectorInfo.vecLen));
+	const string rhsVecType(packingInfo.packed
+							? string(packingInfo.signedRHS ? "i" : "u") + de::toString(vectorInfo.vecElementSize * vectorInfo.vecLen)
+							: (signedRHS ? "i" : "u") + ((!signedRHS && vectorInfo.vecElementSize == 32 && vectorInfo.vecLen == 3) ? "" : de::toString(vectorInfo.vecElementSize)) + "vec" + de::toString(vectorInfo.vecLen));
+	const string lhsVecTypeBase(packingInfo.packed
+								? string(packingInfo.signedLHS ? "i" : "u") + de::toString(vectorInfo.vecElementSize * vectorInfo.vecLen)
+								: (signedLHSAndResult ? "i" : "u") + de::toString(vectorInfo.vecElementSize) + "vec" + de::toString(vectorInfo.vecLen));
+	const string rhsVecTypeBase(packingInfo.packed
+								? string(packingInfo.signedRHS ? "i" : "u") + de::toString(vectorInfo.vecElementSize * vectorInfo.vecLen)
+								: (signedRHS ? "i" : "u") + de::toString(vectorInfo.vecElementSize) + "vec" + de::toString(vectorInfo.vecLen));
+
+	const string optFormatParam(packingInfo.packed ? " PackedVectorFormat4x8BitKHR" : "");
+
+	bool bufferSignednessMatches = (packingInfo.packed
+									? (packingInfo.signedLHS == packingInfo.signedRHS)
+									: (signedLHSAndResult == signedRHS));
+
+	return string(getComputeAsmShaderPreamble(capabilities, extensions)) +
+
+		"OpName %main           \"main\"\n"
+		"OpName %id             \"gl_GlobalInvocationID\"\n"
+
+		"OpDecorate %id BuiltIn GlobalInvocationId\n"
+		+ (bufferSignednessMatches
+		   ? "OpDecorate %bufin BufferBlock\n"
+		   : "OpDecorate %buflhs BufferBlock\n"
+			 "OpDecorate %bufrhs BufferBlock\n") +
+		"OpDecorate %bufout BufferBlock\n"
+		"OpDecorate %indatalhs DescriptorSet 0\n"
+		"OpDecorate %indatalhs Binding 0\n"
+		"OpDecorate %indatarhs DescriptorSet 0\n"
+		"OpDecorate %indatarhs Binding 1\n"
+		+ (acc
+		   ? "OpDecorate %indataacc DescriptorSet 0\n"
+			 "OpDecorate %indataacc Binding 2\n"
+		   : "") +
+		"OpDecorate %outdata DescriptorSet 0\n"
+		"OpDecorate %outdata Binding " + (acc ? "3" : "2") + "\n"
+		+ strideDecors
+
+		+ (bufferSignednessMatches
+		   ? "OpMemberDecorate %bufin 0 Offset 0\n"
+		   : "OpMemberDecorate %buflhs 0 Offset 0\n"
+			 "OpMemberDecorate %bufrhs 0 Offset 0\n") +
+		"OpMemberDecorate %bufout 0 Offset 0\n"
+
+		+ getComputeAsmCommonTypes()
+		+ typeDecls
+
+		+ (bufferSignednessMatches
+		   ? "%bufin     = OpTypeStruct %" + lhsVecTypeBase + "arr\n"
+			 "%bufinptr  = OpTypePointer Uniform %bufin\n"
+		   : "%buflhs    = OpTypeStruct %" + lhsVecTypeBase + "arr\n"
+			 "%buflhsptr = OpTypePointer Uniform %buflhs\n"
+			 "%bufrhs    = OpTypeStruct %" + rhsVecTypeBase + "arr\n"
+			 "%bufrhsptr = OpTypePointer Uniform %bufrhs\n") +
+		"%bufout    = OpTypeStruct %" + outType + "arr\n"
+		"%bufoutptr = OpTypePointer Uniform %bufout\n"
+		"%indatalhs = OpVariable " + (bufferSignednessMatches ? "%bufinptr" : "%buflhsptr") + " Uniform\n"
+		"%indatarhs = OpVariable " + (bufferSignednessMatches ? "%bufinptr" : "%bufrhsptr") + " Uniform\n"
+		+ (acc ? "%indataacc = OpVariable %bufoutptr Uniform\n" : "") +
+		"%outdata   = OpVariable %bufoutptr Uniform\n"
+
+		"%id        = OpVariable %uvec3ptr Input\n"
+		"%zero      = OpConstant %i32 0\n"
+
+		"%main      = OpFunction %void None %voidf\n"
+		"%label     = OpLabel\n"
+		"%idval     = OpLoad %uvec3 %id\n"
+		"%x         = OpCompositeExtract %u32 %idval 0\n"
+		"%inloclhs  = OpAccessChain %" + lhsVecTypeBase + "ptr %indatalhs %zero %x\n"
+		"%invallhs  = OpLoad %" + lhsVecType + " %inloclhs\n"
+		"%inlocrhs  = OpAccessChain %" + rhsVecTypeBase + "ptr %indatarhs %zero %x\n"
+		"%invalrhs  = OpLoad %" + rhsVecType + " %inlocrhs\n"
+		+ (acc
+		   ? "%inlocacc  = OpAccessChain %" + outType + "ptr %indataacc %zero %x\n"
+			 "%invalacc  = OpLoad %" + outType + " %inlocacc\n"
+		   : ""
+		  ) +
+		"%res       = " + insnName + " %" + outType + " %invallhs %invalrhs" + (acc ? " %invalacc" : "") + optFormatParam + "\n"
+		"%outloc    = OpAccessChain %" + outType + "ptr %outdata %zero %x\n"
+		"             OpStore %outloc %res\n"
+		"             OpReturn\n"
+		"             OpFunctionEnd\n";
+}
+
+struct DotProductInputInfo
+{
+	string			name;
+	unsigned int	vecLen;
+	size_t			vecElemSize;
+};
+
+template <class OutputT, class LHSOperandT, class RHSOperandT>
+void fillDotProductOutputs(int numElements, vector<LHSOperandT> &inputInts1, vector<RHSOperandT> &inputInts2,
+						   vector<OutputT> &outputInts, const struct DotProductInputInfo &inputInfo)
+{
+	unsigned int alignedVecLen = inputInfo.vecLen == 3 ? 4 : inputInfo.vecLen;
+	for (int ndx = 0; ndx < numElements; ++ndx)
+	{
+		std::vector<LHSOperandT> inputVec1;
+		std::vector<RHSOperandT> inputVec2;
+		inputVec1.reserve(alignedVecLen);
+		inputVec2.reserve(alignedVecLen);
+
+		for (unsigned int vecElem = 0; vecElem < alignedVecLen; ++vecElem)
+		{
+			// Note: ordering of components does not matter, provided
+			// that it is consistent between lhs and rhs.
+			inputVec1.push_back(inputInts1[ndx * alignedVecLen + vecElem]);
+			inputVec2.push_back(inputInts2[ndx * alignedVecLen + vecElem]);
+		}
+
+		outputInts[ndx] = dotProduct<OutputT>(inputVec1, inputVec2);
+	}
+}
+
+string getDotProductTestName(const struct DotProductInputInfo &inputInfo,
+							 const struct DotProductPackingInfo &packingInfo, size_t outSize)
+{
+	return inputInfo.name
+		+ (packingInfo.packed ? string("_packed_") : "_")
+		+ (packingInfo.signedLHS ? "s" : "u") + (packingInfo.signedRHS ? "s" : "u") +
+		"_v" + de::toString(inputInfo.vecLen) + "i" + de::toString(inputInfo.vecElemSize) +
+		"_out" + de::toString(outSize);
+}
+
+template <class InBufferT, class OutBufferT, class OutputT, class OperandT>
+void addOpSDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group,
+							  int numElements, vector<OperandT> &inputInts1, vector<OperandT> &inputInts2,
+							  const struct DotProductInputInfo &inputInfo, const struct DotProductPackingInfo &packingInfo,
+							  const struct DotProductVectorInfo &vectorInfo)
+{
+	ComputeShaderSpec	spec;
+	size_t				outSize = sizeof(OutputT) * 8;
+	vector<OutputT>		outputInts	(numElements, 0);
+
+	fillDotProductOutputs(numElements, inputInts1, inputInts2, outputInts, inputInfo);
+
+	spec.assembly = generateIntegerDotProductCode(packingInfo, vectorInfo, outSize, true, true, false);
+	addDotProductExtensionAndFeatures(spec, packingInfo, vectorInfo.vecElementSize, outSize);
+
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts1)));
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts2)));
+	spec.outputs.push_back	(BufferSp(new OutBufferT(outputInts)));
+	spec.numWorkGroups		= IVec3(numElements, 1, 1);
+	spec.failResult			= QP_TEST_RESULT_FAIL;
+	spec.failMessage		= "Output doesn't match with expected";
+
+	string qualTestName(getDotProductTestName(inputInfo, packingInfo, outSize));
+
+	group->addChild(new SpvAsmComputeShaderCase(testCtx, qualTestName.data(), "", spec));
+}
+
+template <class InBufferT, class T>
+void addOpSDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name,
+							  const struct DotProductPackingInfo dotProductPackingInfo[], unsigned dotProductPackingInfoSize,
+							  const struct DotProductVectorInfo dotProductVectorInfo[], unsigned dotProductVectorInfoSize,
+							  T vecMin, T vecMax)
+{
+	const int		numElements	= 200;
+	// Note: this test does not currently cover 64-bit integer results
+	for (unsigned int j = 0; j < dotProductVectorInfoSize; j++)
+	{
+		const struct DotProductVectorInfo &vectorInfo = dotProductVectorInfo[j];
+		unsigned int alignedVecLen = getAlignedVecLen(vectorInfo);
+		struct DotProductInputInfo inputInfo = { name, vectorInfo.vecLen, vectorInfo.vecElementSize };
+		vector<T>		inputInts1	(numElements * alignedVecLen, 0);
+		vector<T>		inputInts2	(numElements * alignedVecLen, 0);
+
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts1[0], numElements * alignedVecLen);
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts2[0], numElements * alignedVecLen);
+
+		if (vectorInfo.vecLen == 3)
+			for (unsigned int ndx = 0; ndx < numElements; ++ndx)
+				inputInts1[ndx*4+3] = inputInts2[ndx*4+3] = 0;
+
+		for (unsigned int i = 0; i < dotProductPackingInfoSize; i++)
+		{
+			const struct DotProductPackingInfo &packingInfo = dotProductPackingInfo[i];
+			if (packingInfo.packed && (vectorInfo.vecElementSize != 8 || vectorInfo.vecLen != 4))
+				continue;
+
+			if (vectorInfo.vecElementSize <= 32)
+				addOpSDotKHRComputeTests<InBufferT, Int32Buffer, deInt32>(testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+			if (vectorInfo.vecElementSize <= 16)
+				addOpSDotKHRComputeTests<InBufferT, Int16Buffer, deInt16>(testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+			if (vectorInfo.vecElementSize <= 8)
+				addOpSDotKHRComputeTests<InBufferT, Int8Buffer,  deInt8> (testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+		}
+	}
+}
+
+template <class T>
+void add32bitOpSDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax)
+{
+	addOpSDotKHRComputeTests<Int32Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+										  dotProductVector32, DE_LENGTH_OF_ARRAY(dotProductVector32), vecMin, vecMax);
+}
+
+template <class T>
+void add16bitOpSDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax)
+{
+	addOpSDotKHRComputeTests<Int16Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+										  dotProductVector16, DE_LENGTH_OF_ARRAY(dotProductVector16), vecMin, vecMax);
+}
+
+template <class T>
+void add8bitOpSDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax)
+{
+	addOpSDotKHRComputeTests<Int8Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+										 dotProductVector8, DE_LENGTH_OF_ARRAY(dotProductVector8), vecMin, vecMax);
+}
+
+template <class InBufferT, class OutBufferT, class OutputT, class OperandT>
+void addOpUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group,
+							  int numElements, vector<OperandT> &inputInts1, vector<OperandT> &inputInts2,
+							  const struct DotProductInputInfo &inputInfo, const struct DotProductPackingInfo &packingInfo,
+							  const struct DotProductVectorInfo &vectorInfo)
+{
+	ComputeShaderSpec	spec;
+	size_t				outSize = sizeof(OutputT) * 8;
+	vector<OutputT>		outputInts	(numElements, 0);
+
+	fillDotProductOutputs(numElements, inputInts1, inputInts2, outputInts, inputInfo);
+
+	spec.assembly = generateIntegerDotProductCode(packingInfo, vectorInfo, outSize, false, false, false);
+
+	addDotProductExtensionAndFeatures(spec, packingInfo, vectorInfo.vecElementSize, outSize);
+
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts1)));
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts2)));
+	spec.outputs.push_back	(BufferSp(new OutBufferT(outputInts)));
+	spec.numWorkGroups		= IVec3(numElements, 1, 1);
+	spec.failResult			= QP_TEST_RESULT_FAIL;
+	spec.failMessage		= "Output doesn't match with expected";
+
+	string qualTestName(getDotProductTestName(inputInfo, packingInfo, outSize));
+
+	group->addChild(new SpvAsmComputeShaderCase(testCtx, qualTestName.data(), "", spec));
+}
+
+template <class InBufferT, class T>
+void addOpUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name,
+							  const struct DotProductPackingInfo dotProductPackingInfo[], unsigned dotProductPackingInfoSize,
+							  const struct DotProductVectorInfo dotProductVectorInfo[], unsigned dotProductVectorInfoSize,
+							  T vecMin, T vecMax)
+{
+	const int		numElements	= 200;
+
+	for (unsigned int j = 0; j < dotProductVectorInfoSize; j++)
+	{
+		const struct DotProductVectorInfo &vectorInfo = dotProductVectorInfo[j];
+		unsigned int alignedVecLen = getAlignedVecLen(vectorInfo);
+		struct DotProductInputInfo inputInfo = { name, vectorInfo.vecLen, vectorInfo.vecElementSize };
+		vector<T>		inputInts1	(numElements * alignedVecLen, 0);
+		vector<T>		inputInts2	(numElements * alignedVecLen, 0);
+
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts1[0], numElements * alignedVecLen);
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts2[0], numElements * alignedVecLen);
+
+		if (vectorInfo.vecLen == 3)
+			for (unsigned int ndx = 0; ndx < numElements; ++ndx)
+				inputInts1[ndx*4+3] = inputInts2[ndx*4+3] = 0;
+
+		for (unsigned int i = 0; i < dotProductPackingInfoSize; i++)
+		{
+			const struct DotProductPackingInfo &packingInfo = dotProductPackingInfo[i];
+			if (packingInfo.packed && (vectorInfo.vecElementSize != 8 || vectorInfo.vecLen != 4))
+				continue;
+
+			if (vectorInfo.vecElementSize <= 32)
+				addOpUDotKHRComputeTests<InBufferT, Uint32Buffer, deUint32>(testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+			if (vectorInfo.vecElementSize <= 16)
+				addOpUDotKHRComputeTests<InBufferT, Uint16Buffer, deUint16>(testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+			if (vectorInfo.vecElementSize <= 8)
+				addOpUDotKHRComputeTests<InBufferT, Uint8Buffer,  deUint8> (testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+		}
+	}
+}
+
+template <class T>
+void add32bitOpUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax)
+{
+	addOpUDotKHRComputeTests<Uint32Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+										   dotProductVector32, DE_LENGTH_OF_ARRAY(dotProductVector32), vecMin, vecMax);
+}
+
+template <class T>
+void add16bitOpUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax)
+{
+	addOpUDotKHRComputeTests<Uint16Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+										   dotProductVector16, DE_LENGTH_OF_ARRAY(dotProductVector16), vecMin, vecMax);
+}
+
+template <class T>
+void add8bitOpUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax)
+{
+	addOpUDotKHRComputeTests<Uint8Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+										  dotProductVector8, DE_LENGTH_OF_ARRAY(dotProductVector8), vecMin, vecMax);
+}
+
+template <class LHSBufferT, class RHSBufferT, class OutBufferT, class OutputT, class LHSOperandT, class RHSOperandT>
+void addOpSUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group,
+							   int numElements, vector<LHSOperandT> &inputInts1, vector<RHSOperandT> &inputInts2,
+							   const struct DotProductInputInfo &inputInfo, const struct DotProductPackingInfo &packingInfo,
+							   const struct DotProductVectorInfo &vectorInfo)
+{
+	ComputeShaderSpec	spec;
+	size_t				outSize = sizeof(OutputT) * 8;
+	vector<OutputT>		outputInts	(numElements, 0);
+
+	fillDotProductOutputs(numElements, inputInts1, inputInts2, outputInts, inputInfo);
+
+	spec.assembly = generateIntegerDotProductCode(packingInfo, vectorInfo, outSize, true, false, false);
+	addDotProductExtensionAndFeatures(spec, packingInfo, vectorInfo.vecElementSize, outSize);
+
+	spec.inputs.push_back	(BufferSp(new LHSBufferT(inputInts1)));
+	spec.inputs.push_back	(BufferSp(new RHSBufferT(inputInts2)));
+	spec.outputs.push_back	(BufferSp(new OutBufferT(outputInts)));
+	spec.numWorkGroups		= IVec3(numElements, 1, 1);
+	spec.failResult			= QP_TEST_RESULT_FAIL;
+	spec.failMessage		= "Output doesn't match with expected";
+
+	string qualTestName(getDotProductTestName(inputInfo, packingInfo, outSize));
+
+	group->addChild(new SpvAsmComputeShaderCase(testCtx, qualTestName.data(), "", spec));
+}
+
+template <class LHSBufferT, class RHSBufferT, class LHSOperandT, class RHSOperandT>
+void addOpSUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name,
+							   const struct DotProductPackingInfo dotProductPackingInfo[], unsigned dotProductPackingInfoSize,
+							   const struct DotProductVectorInfo dotProductVectorInfo[], unsigned dotProductVectorInfoSize,
+							   LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax)
+{
+	const int		numElements	= 200;
+	// Note: this test does not currently cover 64-bit integer results
+	for (unsigned int j = 0; j < dotProductVectorInfoSize; j++)
+	{
+		const struct DotProductVectorInfo &vectorInfo = dotProductVectorInfo[j];
+		unsigned int alignedVecLen = getAlignedVecLen(vectorInfo);
+		struct DotProductInputInfo inputInfo = { name, vectorInfo.vecLen, vectorInfo.vecElementSize };
+		vector<LHSOperandT>	inputInts1	(numElements * alignedVecLen, 0);
+		vector<RHSOperandT>	inputInts2	(numElements * alignedVecLen, 0);
+
+		fillRandomScalars(rnd, lhsVecMin, lhsVecMax, &inputInts1[0], numElements * alignedVecLen);
+		fillRandomScalars(rnd, rhsVecMin, rhsVecMax, &inputInts2[0], numElements * alignedVecLen);
+
+		if (vectorInfo.vecLen == 3)
+			for (unsigned int ndx = 0; ndx < numElements; ++ndx)
+				inputInts1[ndx*4+3] = inputInts2[ndx*4+3] = 0;
+
+
+		for (unsigned int i = 0; i < dotProductPackingInfoSize; i++)
+		{
+			const struct DotProductPackingInfo &packingInfo = dotProductPackingInfo[i];
+			if (packingInfo.packed && (vectorInfo.vecElementSize != 8 || vectorInfo.vecLen != 4))
+				continue;
+
+			if (vectorInfo.vecElementSize <= 32)
+				addOpSUDotKHRComputeTests<LHSBufferT, RHSBufferT, Int32Buffer, deInt32>(testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+			if (vectorInfo.vecElementSize <= 16)
+				addOpSUDotKHRComputeTests<LHSBufferT, RHSBufferT, Int16Buffer, deInt16>(testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+			if (vectorInfo.vecElementSize <= 8)
+				addOpSUDotKHRComputeTests<LHSBufferT, RHSBufferT, Int8Buffer,  deInt8> (testCtx, group, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo);
+		}
+	}
+}
+
+template <class LHSOperandT, class RHSOperandT>
+void add32bitOpSUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax)
+{
+	addOpSUDotKHRComputeTests<Int32Buffer, Uint32Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+														 dotProductVector32, DE_LENGTH_OF_ARRAY(dotProductVector32), lhsVecMin, lhsVecMax, rhsVecMin, rhsVecMax);
+}
+
+template <class LHSOperandT, class RHSOperandT>
+void add16bitOpSUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax)
+{
+	addOpSUDotKHRComputeTests<Int16Buffer, Uint16Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+														 dotProductVector16, DE_LENGTH_OF_ARRAY(dotProductVector16), lhsVecMin, lhsVecMax, rhsVecMin, rhsVecMax);
+}
+
+template <class LHSOperandT, class RHSOperandT>
+void add8bitOpSUDotKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax)
+{
+	addOpSUDotKHRComputeTests<Int8Buffer, Uint8Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+													   dotProductVector8, DE_LENGTH_OF_ARRAY(dotProductVector8), lhsVecMin, lhsVecMax, rhsVecMin, rhsVecMax);
+}
+
+template <class InBufferT, class AddendBufferT, class AddendT, class OperandT>
+void addOpSDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd,
+									int numElements, vector<OperandT> &inputInts1, vector<OperandT> &inputInts2,
+									const struct DotProductInputInfo &inputInfo, const struct DotProductPackingInfo &packingInfo,
+									const struct DotProductVectorInfo &vectorInfo, bool useMaxAddend)
+{
+	ComputeShaderSpec	spec;
+	size_t				addendSize = sizeof(AddendT) * 8;
+	vector<AddendT>		inputInts3	(numElements, 0);
+	vector<AddendT>		outputInts	(numElements, 0);
+
+	if (useMaxAddend)
+		fillRandomScalars(rnd, (AddendT)(std::numeric_limits<AddendT>::max()-20), (AddendT)(std::numeric_limits<AddendT>::max()),
+					  &inputInts3[0], numElements);
+	else
+		fillRandomScalars(rnd, (AddendT)(std::numeric_limits<AddendT>::min()), (AddendT)(std::numeric_limits<AddendT>::min()+20),
+					  &inputInts3[0], numElements);
+
+	spec.assembly = generateIntegerDotProductCode(packingInfo, vectorInfo, addendSize, true, true, true);
+
+	addDotProductExtensionAndFeatures(spec, packingInfo, vectorInfo.vecElementSize, addendSize);
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts1)));
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts2)));
+	spec.inputs.push_back	(BufferSp(new AddendBufferT(inputInts3)));
+	spec.outputs.push_back	(BufferSp(new AddendBufferT(outputInts)));
+	spec.numWorkGroups		= IVec3(numElements, 1, 1);
+	spec.verifyIO			= &compareDotProductAccSat<AddendT, OperandT, OperandT>;
+	spec.failResult			= QP_TEST_RESULT_FAIL;
+	spec.failMessage		= "Output doesn't match with expected";
+
+	string qualTestName(getDotProductTestName(inputInfo, packingInfo, addendSize));
+
+	group->addChild(new SpvAsmComputeShaderCase(testCtx, qualTestName.data(), "", spec));
+}
+
+template <class InBufferT, class T>
+void addOpSDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name,
+									const struct DotProductPackingInfo dotProductPackingInfo[], unsigned dotProductPackingInfoSize,
+									const struct DotProductVectorInfo dotProductVectorInfo[], unsigned dotProductVectorInfoSize,
+									T vecMin, T vecMax, bool useMaxAddend)
+{
+	const int		numElements	= 200;
+	// Note: this test does not currently cover 64-bit integer results
+	for (unsigned int j = 0 ; j < dotProductVectorInfoSize; j++)
+	{
+		const struct DotProductVectorInfo &vectorInfo = dotProductVectorInfo[j];
+		unsigned int alignedVecLen = getAlignedVecLen(vectorInfo);
+		struct DotProductInputInfo inputInfo = { name, vectorInfo.vecLen, vectorInfo.vecElementSize };
+		vector<T>		inputInts1	(numElements * alignedVecLen, 0);
+		vector<T>		inputInts2	(numElements * alignedVecLen, 0);
+
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts1[0], numElements * alignedVecLen);
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts2[0], numElements * alignedVecLen);
+
+		if (vectorInfo.vecLen == 3)
+			for (unsigned int ndx = 0; ndx < numElements; ++ndx)
+				inputInts1[ndx*4+3] = inputInts2[ndx*4+3] = 0;
+
+
+		for (unsigned int i = 0; i < dotProductPackingInfoSize; i++)
+		{
+			const struct DotProductPackingInfo &packingInfo = dotProductPackingInfo[i];
+			if (packingInfo.packed && (vectorInfo.vecElementSize != 8 || vectorInfo.vecLen != 4))
+				continue;
+
+			if (vectorInfo.vecElementSize <= 32)
+				addOpSDotAccSatKHRComputeTests<InBufferT, Int32Buffer, deInt32>(testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+			if (vectorInfo.vecElementSize <= 16)
+				addOpSDotAccSatKHRComputeTests<InBufferT, Int16Buffer, deInt16>(testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+			if (vectorInfo.vecElementSize <= 8)
+				addOpSDotAccSatKHRComputeTests<InBufferT, Int8Buffer,  deInt8> (testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+		}
+	}
+}
+
+template <class T>
+void add32bitOpSDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax, bool useMaxAddend = true)
+{
+	addOpSDotAccSatKHRComputeTests<Int32Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+												dotProductVector32, DE_LENGTH_OF_ARRAY(dotProductVector32), vecMin, vecMax, useMaxAddend);
+}
+
+template <class T>
+void add16bitOpSDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax, bool useMaxAddend = true)
+{
+	addOpSDotAccSatKHRComputeTests<Int16Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+												dotProductVector16, DE_LENGTH_OF_ARRAY(dotProductVector16), vecMin, vecMax, useMaxAddend);
+}
+
+template <class T>
+void add8bitOpSDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax, bool useMaxAddend = true)
+{
+	addOpSDotAccSatKHRComputeTests<Int8Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+											   dotProductVector8, DE_LENGTH_OF_ARRAY(dotProductVector8), vecMin, vecMax, useMaxAddend);
+}
+
+template <class InBufferT, class AddendBufferT, class AddendT, class OperandT>
+void addOpUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd,
+									int numElements, vector<OperandT> &inputInts1, vector<OperandT> &inputInts2,
+									const struct DotProductInputInfo &inputInfo, const struct DotProductPackingInfo &packingInfo,
+									const struct DotProductVectorInfo &vectorInfo, bool useMaxAddend)
+{
+	ComputeShaderSpec	spec;
+	size_t				addendSize = sizeof(AddendT) * 8;
+	vector<AddendT>		inputInts3	(numElements, 0);
+	vector<AddendT>		outputInts	(numElements, 0);
+
+	if (useMaxAddend)
+		fillRandomScalars(rnd, (AddendT)(std::numeric_limits<AddendT>::max()-20), (AddendT)(std::numeric_limits<AddendT>::max()),
+					&inputInts3[0], numElements);
+	else
+		fillRandomScalars(rnd, (AddendT)(std::numeric_limits<AddendT>::min()), (AddendT)(std::numeric_limits<AddendT>::min()+20),
+					&inputInts3[0], numElements);
+
+	spec.assembly = generateIntegerDotProductCode(packingInfo, vectorInfo, addendSize, false, false, true);
+
+	addDotProductExtensionAndFeatures(spec, packingInfo, vectorInfo.vecElementSize, addendSize);
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts1)));
+	spec.inputs.push_back	(BufferSp(new InBufferT(inputInts2)));
+	spec.inputs.push_back	(BufferSp(new AddendBufferT(inputInts3)));
+	spec.outputs.push_back	(BufferSp(new AddendBufferT(outputInts)));
+	spec.numWorkGroups		= IVec3(numElements, 1, 1);
+	spec.verifyIO			= &compareDotProductAccSat<AddendT, OperandT, OperandT>;
+	spec.failResult			= QP_TEST_RESULT_FAIL;
+	spec.failMessage		= "Output doesn't match with expected";
+
+	string qualTestName(getDotProductTestName(inputInfo, packingInfo, addendSize));
+
+	group->addChild(new SpvAsmComputeShaderCase(testCtx, qualTestName.data(), "", spec));
+}
+
+template <class InBufferT, class T>
+void addOpUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name,
+									const struct DotProductPackingInfo dotProductPackingInfo[], unsigned dotProductPackingInfoSize,
+									const struct DotProductVectorInfo dotProductVectorInfo[], unsigned dotProductVectorInfoSize,
+									T vecMin, T vecMax, bool useMaxAddend)
+{
+	const int		numElements	= 200;
+	// Note: this test does not currently cover 64-bit integer results
+
+	for (unsigned int j = 0 ; j < dotProductVectorInfoSize; j++)
+	{
+		const struct DotProductVectorInfo &vectorInfo = dotProductVectorInfo[j];
+		unsigned int alignedVecLen = getAlignedVecLen(vectorInfo);
+		struct DotProductInputInfo inputInfo = { name, vectorInfo.vecLen, vectorInfo.vecElementSize };
+		vector<T>		inputInts1	(numElements * alignedVecLen, 0);
+		vector<T>		inputInts2	(numElements * alignedVecLen, 0);
+
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts1[0], numElements * alignedVecLen);
+		fillRandomScalars(rnd, vecMin, vecMax, &inputInts2[0], numElements * alignedVecLen);
+
+		if (vectorInfo.vecLen == 3)
+			for (unsigned int ndx = 0; ndx < numElements; ++ndx)
+				inputInts1[ndx*4+3] = inputInts2[ndx*4+3] = 0;
+
+		for (unsigned int i = 0; i < dotProductPackingInfoSize; i++)
+		{
+			const struct DotProductPackingInfo &packingInfo = dotProductPackingInfo[i];
+			if (packingInfo.packed && (vectorInfo.vecElementSize != 8 || vectorInfo.vecLen != 4))
+				continue;
+
+			if (vectorInfo.vecElementSize <= 32)
+				addOpUDotAccSatKHRComputeTests<InBufferT, Uint32Buffer, deUint32>(testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+			if (vectorInfo.vecElementSize <= 16)
+				addOpUDotAccSatKHRComputeTests<InBufferT, Uint16Buffer, deUint16>(testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+			if (vectorInfo.vecElementSize <= 8)
+				addOpUDotAccSatKHRComputeTests<InBufferT, Uint8Buffer,  deUint8> (testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+		}
+	}
+}
+
+template <class T>
+void add32bitOpUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax, bool useMaxAddend = true)
+{
+	addOpUDotAccSatKHRComputeTests<Uint32Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+												 dotProductVector32, DE_LENGTH_OF_ARRAY(dotProductVector32), vecMin, vecMax, useMaxAddend);
+}
+
+template <class T>
+void add16bitOpUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax, bool useMaxAddend = true)
+{
+	addOpUDotAccSatKHRComputeTests<Uint16Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+												 dotProductVector16, DE_LENGTH_OF_ARRAY(dotProductVector16), vecMin, vecMax, useMaxAddend);
+}
+
+template <class T>
+void add8bitOpUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, T vecMin, T vecMax, bool useMaxAddend = true)
+{
+	addOpUDotAccSatKHRComputeTests<Uint8Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+												dotProductVector8, DE_LENGTH_OF_ARRAY(dotProductVector8), vecMin, vecMax, useMaxAddend);
+}
+
+template <class LHSBufferT, class RHSBufferT, class AddendBufferT, class AddendT, class LHSOperandT, class RHSOperandT>
+void addOpSUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd,
+									 int numElements, vector<LHSOperandT> &inputInts1, vector<RHSOperandT> &inputInts2,
+									 const struct DotProductInputInfo &inputInfo, const struct DotProductPackingInfo &packingInfo,
+									 const struct DotProductVectorInfo &vectorInfo, bool useMaxAddend)
+{
+	ComputeShaderSpec	spec;
+	size_t				addendSize = sizeof(AddendT) * 8;
+	vector<AddendT>		inputInts3	(numElements, 0);
+	vector<AddendT>		outputInts	(numElements, 0);
+
+	// Populate the accumulation buffer with large values to attempt to guarantee saturation
+	if (useMaxAddend)
+		fillRandomScalars(rnd, (AddendT)(std::numeric_limits<AddendT>::max()-20), (AddendT)(std::numeric_limits<AddendT>::max()),
+					&inputInts3[0], numElements);
+	else
+		fillRandomScalars(rnd, (AddendT)(std::numeric_limits<AddendT>::min()), (AddendT)(std::numeric_limits<AddendT>::min()+20),
+					&inputInts3[0], numElements);
+
+	spec.assembly = generateIntegerDotProductCode(packingInfo, vectorInfo, addendSize, true, false, true);
+	addDotProductExtensionAndFeatures(spec, packingInfo, vectorInfo.vecElementSize, addendSize);
+	spec.inputs.push_back	(BufferSp(new LHSBufferT(inputInts1)));
+	spec.inputs.push_back	(BufferSp(new RHSBufferT(inputInts2)));
+	spec.inputs.push_back	(BufferSp(new AddendBufferT(inputInts3)));
+	spec.outputs.push_back	(BufferSp(new AddendBufferT(outputInts)));
+	spec.numWorkGroups		= IVec3(numElements, 1, 1);
+	spec.verifyIO			= &compareDotProductAccSat<AddendT, LHSOperandT, RHSOperandT>;
+	spec.failResult			= QP_TEST_RESULT_FAIL;
+	spec.failMessage		= "Output doesn't match with expected";
+
+	string qualTestName(getDotProductTestName(inputInfo, packingInfo, addendSize));
+
+	group->addChild(new SpvAsmComputeShaderCase(testCtx, qualTestName.data(), "", spec));
+}
+
+template <class LHSBufferT, class RHSBufferT, class LHSOperandT, class RHSOperandT>
+void addOpSUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name,
+									 const struct DotProductPackingInfo dotProductPackingInfo[], unsigned dotProductPackingInfoSize,
+									 const struct DotProductVectorInfo dotProductVectorInfo[], unsigned dotProductVectorInfoSize,
+									 LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax, bool useMaxAddend)
+{
+	const int	numElements	= 200;
+	// Note: this test does not currently cover 64-bit integer results
+
+	for (unsigned int j = 0; j < dotProductVectorInfoSize; j++)
+	{
+		const struct DotProductVectorInfo &vectorInfo = dotProductVectorInfo[j];
+		unsigned int alignedVecLen = getAlignedVecLen(vectorInfo);
+		struct DotProductInputInfo inputInfo = { name, vectorInfo.vecLen, vectorInfo.vecElementSize };
+		vector<LHSOperandT>	inputInts1	(numElements * alignedVecLen, 0);
+		vector<RHSOperandT>	inputInts2	(numElements * alignedVecLen, 0);
+
+		fillRandomScalars(rnd, lhsVecMin, lhsVecMax, &inputInts1[0], numElements * alignedVecLen);
+		fillRandomScalars(rnd, rhsVecMin, rhsVecMax, &inputInts2[0], numElements * alignedVecLen);
+
+		if (vectorInfo.vecLen == 3)
+			for (unsigned int ndx = 0; ndx < numElements; ++ndx)
+				inputInts1[ndx*4+3] = inputInts2[ndx*4+3] = 0;
+
+		for (unsigned int i = 0; i < dotProductPackingInfoSize; i++)
+		{
+			const struct DotProductPackingInfo &packingInfo = dotProductPackingInfo[i];
+			if (packingInfo.packed && (vectorInfo.vecElementSize != 8 || vectorInfo.vecLen != 4))
+				continue;
+
+			if (vectorInfo.vecElementSize <= 32)
+				addOpSUDotAccSatKHRComputeTests<LHSBufferT, RHSBufferT, Int32Buffer, deInt32>(testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+			if (vectorInfo.vecElementSize <= 16)
+				addOpSUDotAccSatKHRComputeTests<LHSBufferT, RHSBufferT, Int16Buffer, deInt16>(testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+			if (vectorInfo.vecElementSize <= 8)
+				addOpSUDotAccSatKHRComputeTests<LHSBufferT, RHSBufferT, Int8Buffer,  deInt8> (testCtx, group, rnd, numElements, inputInts1, inputInts2, inputInfo, packingInfo, vectorInfo, useMaxAddend);
+		}
+	}
+}
+
+template <class LHSOperandT, class RHSOperandT>
+void add32bitOpSUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax, bool useMaxAddend = true)
+{
+    addOpSUDotAccSatKHRComputeTests<Int32Buffer, Uint32Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+															   dotProductVector32, DE_LENGTH_OF_ARRAY(dotProductVector32), lhsVecMin, lhsVecMax, rhsVecMin, rhsVecMax, useMaxAddend);
+}
+
+template <class LHSOperandT, class RHSOperandT>
+void add16bitOpSUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax, bool useMaxAddend = true)
+{
+	addOpSUDotAccSatKHRComputeTests<Int16Buffer, Uint16Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+															   dotProductVector16, DE_LENGTH_OF_ARRAY(dotProductVector16), lhsVecMin, lhsVecMax, rhsVecMin, rhsVecMax, useMaxAddend);
+}
+
+template <class LHSOperandT, class RHSOperandT>
+void add8bitOpSUDotAccSatKHRComputeTests(tcu::TestContext& testCtx, tcu::TestCaseGroup *group, de::Random &rnd, string name, LHSOperandT lhsVecMin, LHSOperandT lhsVecMax, RHSOperandT rhsVecMin, RHSOperandT rhsVecMax, bool useMaxAddend = true)
+{
+	addOpSUDotAccSatKHRComputeTests<Int8Buffer, Uint8Buffer>(testCtx, group, rnd, name, dotProductPacking, DE_LENGTH_OF_ARRAY(dotProductPacking),
+															 dotProductVector8, DE_LENGTH_OF_ARRAY(dotProductVector8), lhsVecMin, lhsVecMax, rhsVecMin, rhsVecMax, useMaxAddend);
+}
+
+} // anon namespace
+
+tcu::TestCaseGroup* createOpSDotKHRComputeGroup(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "opsdotkhr", "Test the OpSDotKHR instruction"));
+	de::Random						rnd		(deStringHash(group->getName()));
+
+	add8bitOpSDotKHRComputeTests(testCtx, group.get(), rnd, string("all"),   std::numeric_limits<deInt8>::min(), std::numeric_limits<deInt8>::max());
+	add8bitOpSDotKHRComputeTests(testCtx, group.get(), rnd, string("small"), (deInt8)-20,  (deInt8)20);
+	add16bitOpSDotKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt16>::min(), std::numeric_limits<deInt16>::max());
+	add32bitOpSDotKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt32>::min(), std::numeric_limits<deInt32>::max());
+
+	return group.release();
+}
+
+tcu::TestCaseGroup* createOpUDotKHRComputeGroup(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "opudotkhr", "Test the OpUDotKHR instruction"));
+	de::Random						rnd		(deStringHash(group->getName()));
+
+	add8bitOpUDotKHRComputeTests(testCtx, group.get(), rnd, string("all"),   std::numeric_limits<deUint8>::min(), std::numeric_limits<deUint8>::max());
+	add8bitOpUDotKHRComputeTests(testCtx, group.get(), rnd, string("small"), (deUint8)0,  (deUint8)20);
+	add16bitOpUDotKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deUint16>::min(), std::numeric_limits<deUint16>::max());
+	add32bitOpUDotKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deUint32>::min(), std::numeric_limits<deUint32>::max());
+
+	return group.release();
+}
+
+tcu::TestCaseGroup* createOpSUDotKHRComputeGroup(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "opsudotkhr", "Test the OpSUDotKHR instruction"));
+	de::Random						rnd		(deStringHash(group->getName()));
+
+	add8bitOpSUDotKHRComputeTests(testCtx, group.get(), rnd, string("all"),   std::numeric_limits<deInt8>::min(), std::numeric_limits<deInt8>::max(), std::numeric_limits<deUint8>::min(), std::numeric_limits<deUint8>::max());
+	add8bitOpSUDotKHRComputeTests(testCtx, group.get(), rnd, string("small"), (deInt8)-20,  (deInt8)20,  (deUint8)0, (deUint8)20);
+	add16bitOpSUDotKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt16>::min(), std::numeric_limits<deInt16>::max(),  std::numeric_limits<deUint16>::min(), std::numeric_limits<deUint16>::max());
+	add32bitOpSUDotKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt32>::min(), std::numeric_limits<deInt32>::max(),  std::numeric_limits<deUint32>::min(), std::numeric_limits<deUint32>::max());
+
+	return group.release();
+}
+
+tcu::TestCaseGroup* createOpSDotAccSatKHRComputeGroup(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "opsdotaccsatkhr", "Test the OpSDotAccSatKHR instruction"));
+	de::Random						rnd		(deStringHash(group->getName()));
+
+	add8bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"),   std::numeric_limits<deInt8>::min(), std::numeric_limits<deInt8>::max());
+	add8bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deInt8)(12), (deInt8)(20));
+	add8bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits-neg"),   (deInt8)(-20), (deInt8)(-12), false);
+	add8bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("small"), (deInt8)-20,  (deInt8)20);
+	add16bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt16>::min(), std::numeric_limits<deInt16>::max());
+	add16bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deInt16)(std::numeric_limits<deInt8>::max()-20), (deInt16)(std::numeric_limits<deInt8>::max()+20));
+	add16bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits-neg"),   (deInt16)(std::numeric_limits<deInt8>::min()-20), (deInt16)(std::numeric_limits<deInt8>::min()+20), false);
+	add32bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt32>::min(), std::numeric_limits<deInt32>::max());
+	add32bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deInt32)(std::numeric_limits<deInt16>::max()-20), (deInt32)(std::numeric_limits<deInt16>::max()+20));
+	add32bitOpSDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits-neg"),   (deInt32)(std::numeric_limits<deInt16>::min()-20), (deInt32)(std::numeric_limits<deInt16>::min()+20), false);
+
+	return group.release();
+}
+
+tcu::TestCaseGroup* createOpUDotAccSatKHRComputeGroup(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "opudotaccsatkhr", "Test the OpUDotAccSatKHR instruction"));
+	de::Random						rnd		(deStringHash(group->getName()));
+
+	add8bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"),   std::numeric_limits<deUint8>::min(), std::numeric_limits<deUint8>::max());
+	add8bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deUint8)(12), (deUint8)(20));
+	add8bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("small"), (deUint8)0,  (deUint8)20);
+	add16bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deUint16>::min(), std::numeric_limits<deUint16>::max());
+	add16bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deUint16)(std::numeric_limits<deUint8>::max()-40), (deUint16)(std::numeric_limits<deUint8>::max()-20));
+	add32bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deUint32>::min(), std::numeric_limits<deUint32>::max());
+	add32bitOpUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deUint32)(std::numeric_limits<deUint16>::max()-40), (deUint32)(std::numeric_limits<deUint16>::max()-20));
+
+	return group.release();
+}
+
+tcu::TestCaseGroup* createOpSUDotAccSatKHRComputeGroup(tcu::TestContext& testCtx)
+{
+	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "opsudotaccsatkhr", "Test the OpSUDotAccSatKHR instruction"));
+	de::Random						rnd		(deStringHash(group->getName()));
+
+	add8bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"),   std::numeric_limits<deInt8>::min(), std::numeric_limits<deInt8>::max(), std::numeric_limits<deUint8>::min(), std::numeric_limits<deUint8>::max());
+	add8bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deInt8)(12), (deInt8)(20), (deUint8)(12), (deUint8)(20));
+	add8bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits-neg"),   (deInt8)(-20), (deInt8)(-12), (deUint8)(12), (deUint8)(20), false);
+	add8bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("small"), (deInt8)-20,  (deInt8)20,  (deUint8)0, (deUint8)20);
+	add16bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt16>::min(), std::numeric_limits<deInt16>::max(),  std::numeric_limits<deUint16>::min(), std::numeric_limits<deUint16>::max());
+	add16bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deInt16)(std::numeric_limits<deInt8>::max()-20), (deInt16)(std::numeric_limits<deInt8>::max()+20), (deUint16)(std::numeric_limits<deUint8>::max()-40), (deUint16)(std::numeric_limits<deUint8>::max()-20));
+	add16bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits-neg"),   (deInt16)(std::numeric_limits<deInt8>::min()-20), (deInt16)(std::numeric_limits<deInt8>::min()+20), (deUint16)(std::numeric_limits<deUint8>::max()-40), (deUint16)(std::numeric_limits<deUint8>::max()-20), false);
+	add32bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("all"), std::numeric_limits<deInt32>::min(), std::numeric_limits<deInt32>::max(),  std::numeric_limits<deUint32>::min(), std::numeric_limits<deUint32>::max());
+	add32bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits"),   (deInt32)(std::numeric_limits<deInt16>::max()-20), (deInt32)(std::numeric_limits<deInt16>::max()+20), (deUint32)(std::numeric_limits<deUint16>::max()-40), (deUint32)(std::numeric_limits<deUint16>::max()-20));
+	add32bitOpSUDotAccSatKHRComputeTests(testCtx, group.get(), rnd, string("limits-neg"),   (deInt32)(std::numeric_limits<deInt16>::min()-20), (deInt32)(std::numeric_limits<deInt16>::min()+20), (deUint32)(std::numeric_limits<deUint16>::max()-40), (deUint32)(std::numeric_limits<deUint16>::max()-20), false);
+
+	return group.release();
+}
+
+} // SpirVAssembly
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.hpp
new file mode 100644
index 0000000..7c433e4
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmIntegerDotProductTests.hpp
@@ -0,0 +1,44 @@
+#ifndef _VKTSPVASMINTEGERDOTPRODUCTTESTS_HPP
+#define _VKTSPVASMINTEGERDOTPRODUCTTESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2021 Arm Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Functional integer dot product tests
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+tcu::TestCaseGroup* createOpSDotKHRComputeGroup(tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createOpUDotKHRComputeGroup(tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createOpSUDotKHRComputeGroup(tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createOpSDotAccSatKHRComputeGroup(tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createOpUDotAccSatKHRComputeGroup(tcu::TestContext& testCtx);
+tcu::TestCaseGroup* createOpSUDotAccSatKHRComputeGroup(tcu::TestContext& testCtx);
+
+} // SpirVAssembly
+} // vkt
+
+#endif // _VKTSPVASMINTEGERDOTPRODUCTTESTS_HPP
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp
index 82a58c4..3f091c9 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp
@@ -305,10 +305,6 @@
 			"                          OpDecorate %Output Block\n"
 			"                          OpDecorate %dataOutput DescriptorSet 0\n"
 			"                          OpDecorate %dataOutput Binding 0\n"
-			"                          OpDecorate %f0 DescriptorSet 0\n"
-			"                          OpDecorate %f0 Binding 0\n"
-			"                          OpDecorate %f1 DescriptorSet 0\n"
-			"                          OpDecorate %f1 Binding 0\n"
 			"                          OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId\n"
 			"                  %void = OpTypeVoid\n"
 			"             %void_func = OpTypeFunction %void\n"
@@ -936,10 +932,6 @@
 		"                          OpDecorate %Output Block\n"
 		"                          OpDecorate %dataOutput DescriptorSet 0\n"
 		"                          OpDecorate %dataOutput Binding 0\n"
-		"                          OpDecorate %f0 DescriptorSet 0\n"
-		"                          OpDecorate %f0 Binding 0\n"
-		"                          OpDecorate %f1 DescriptorSet 0\n"
-		"                          OpDecorate %f1 Binding 0\n"
 		"                          OpDecorate %arr_v4f32_2 ArrayStride 16\n"
 		"                          OpDecorate %arr_v4f32_rt ArrayStride 16\n";
 
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp
index fd557ed..41f7ed4 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmUtils.hpp
@@ -273,7 +273,7 @@
 	ExtensionVariablePointersFeatures	extVariablePointers;
 	ExtensionVulkanMemoryModelFeatures	extVulkanMemoryModel;
 	ExtensionFloatControlsFeatures		floatControlsProperties;
-
+	vk::VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR extIntegerDotProduct;
 
 	VulkanFeatures				(void)
 		: extFloat16Int8		(0)
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp
index e5cb21f..dab28d5 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmVariablePointersTests.cpp
@@ -749,23 +749,23 @@
 		"OpDecorate %outer_struct_ptr    ArrayStride 256	\n"
 		"OpDecorate %v4f32_ptr           ArrayStride 16		\n";
 
-	const string inputABDecorations (
+	string inputABDecorations = physPtrs ? "" :
 		"OpDecorate %inputA DescriptorSet 0				\n"
 		"OpDecorate %inputB DescriptorSet 0				\n"
 		"OpDecorate %inputA Binding 0					\n"
-		"OpDecorate %inputB Binding 1					\n"
+		"OpDecorate %inputB Binding 1					\n";
 
 		// inputA and inputB have type outer_struct so it needs Block
-		"OpDecorate %outer_struct	Block				\n"
-	);
+	inputABDecorations +=
+		"OpDecorate %outer_struct	Block				\n";
 
-	const string inputCDecorations (
+	string inputCDecorations = physPtrs ? "" :
 		"OpDecorate %inputC DescriptorSet 0				\n"
-		"OpDecorate %inputC Binding 2					\n"
+		"OpDecorate %inputC Binding 2					\n";
 
+	inputCDecorations += physPtrs ? "" :
 		// inputC has type input_buffer so it needs Block
-		"OpDecorate %input_buffer	Block				\n"
-	);
+		"OpDecorate %input_buffer	Block				\n";
 
 	string types =
 		///////////////
diff --git a/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp b/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp
index 08b3730..0c460b2 100644
--- a/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp
+++ b/external/vulkancts/modules/vulkan/transform_feedback/vktTransformFeedbackSimpleTests.cpp
@@ -2018,8 +2018,6 @@
 	const Move<VkBuffer>						queryPoolResultsBuffer		= createBuffer(vk, device, &queryBufferCreateInfo);
 	const MovePtr<Allocation>					queryPoolResultsBufferAlloc	= allocator.allocate(getBufferMemoryRequirements(vk, device, *queryPoolResultsBuffer), MemoryRequirement::HostVisible);
 
-    vk.resetQueryPool(device, *queryPool, queryIndex, queryCountersNumber);
-
 	DE_ASSERT(queryCountersNumber == queryExpectedData.size());
 
 	VK_CHECK(vk.bindBufferMemory(device, *queryPoolResultsBuffer, queryPoolResultsBufferAlloc->getMemory(), queryPoolResultsBufferAlloc->getOffset()));
@@ -2028,6 +2026,8 @@
 
 	beginCommandBuffer(vk, *cmdBuffer);
 	{
+		vk.cmdResetQueryPool(*cmdBuffer, *queryPool, queryIndex, queryCountersNumber);
+
 		beginRenderPass(vk, *cmdBuffer, *renderPass, *framebuffer, makeRect2D(m_imageExtent2D));
 		{
 			vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline);
diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt
index 817d8960..3cd78c6 100644
--- a/external/vulkancts/mustpass/master/vk-default.txt
+++ b/external/vulkancts/mustpass/master/vk-default.txt
Binary files differ
diff --git a/external/vulkancts/scripts/gen_framework.py b/external/vulkancts/scripts/gen_framework.py
index 427e062..72c1587 100755
--- a/external/vulkancts/scripts/gen_framework.py
+++ b/external/vulkancts/scripts/gen_framework.py
@@ -1740,7 +1740,8 @@
 		'VkPhysicalDeviceDescriptorIndexingFeatures',
 		'VkPhysicalDeviceTimelineSemaphoreFeatures',
 		'VkPhysicalDeviceFragmentDensityMapFeaturesEXT',
-		'VkPhysicalDeviceFragmentDensityMap2FeaturesEXT'
+		'VkPhysicalDeviceFragmentDensityMap2FeaturesEXT',
+		'VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR',
 	]
 	# helper class used to encapsulate all data needed during generation
 	class StructureDetail:
diff --git a/external/vulkancts/scripts/src/extensions_data.txt b/external/vulkancts/scripts/src/extensions_data.txt
index 319bce3..c42025b 100644
--- a/external/vulkancts/scripts/src/extensions_data.txt
+++ b/external/vulkancts/scripts/src/extensions_data.txt
@@ -93,3 +93,4 @@
 VK_KHR_workgroup_memory_explicit_layout			DEVICE
 VK_KHR_synchronization2						DEVICE
 VK_EXT_color_write_enable					DEVICE
+VK_KHR_shader_integer_dot_product			DEVICE
\ No newline at end of file
diff --git a/external/vulkancts/scripts/src/mandatory_features.txt b/external/vulkancts/scripts/src/mandatory_features.txt
index cbe42e6..33fb269 100644
--- a/external/vulkancts/scripts/src/mandatory_features.txt
+++ b/external/vulkancts/scripts/src/mandatory_features.txt
@@ -133,3 +133,4 @@
 VkPhysicalDeviceColorWriteEnableFeaturesEXT					FEATURES ( colorWriteEnable )									REQUIREMENTS ( VK_EXT_color_write_enable )
 VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT			FEATURES ( ycbcr2plane444Formats )								REQUIREMENTS ( VK_EXT_ycbcr_2plane_444_formats )
 VkPhysicalDeviceExtendedDynamicState2FeaturesEXT			FEATURES ( extendedDynamicState2 )								REQUIREMENTS ( VK_EXT_extended_dynamic_state2 )
+VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR          FEATURES ( shaderIntegerDotProduct )							REQUIREMENTS ( VK_KHR_shader_integer_dot_product )
\ No newline at end of file
diff --git a/external/vulkancts/scripts/src/vulkan_core.h b/external/vulkancts/scripts/src/vulkan_core.h
index 06e389a..8dc85b8 100644
--- a/external/vulkancts/scripts/src/vulkan_core.h
+++ b/external/vulkancts/scripts/src/vulkan_core.h
@@ -752,6 +752,8 @@
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000,
     VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = 1000280000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = 1000280001,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
     VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000,
@@ -7802,6 +7804,52 @@
 #endif
 
 
+#define VK_KHR_shader_integer_dot_product 1
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1
+#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product"
+typedef struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderIntegerDotProduct;
+} VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+
+typedef struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           integerDotProduct8BitUnsignedAccelerated;
+    VkBool32           integerDotProduct8BitSignedAccelerated;
+    VkBool32           integerDotProduct8BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedUnsignedAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedSignedAccelerated;
+    VkBool32           integerDotProduct4x8BitPackedMixedSignednessAccelerated;
+    VkBool32           integerDotProduct16BitUnsignedAccelerated;
+    VkBool32           integerDotProduct16BitSignedAccelerated;
+    VkBool32           integerDotProduct16BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct32BitUnsignedAccelerated;
+    VkBool32           integerDotProduct32BitSignedAccelerated;
+    VkBool32           integerDotProduct32BitMixedSignednessAccelerated;
+    VkBool32           integerDotProduct64BitUnsignedAccelerated;
+    VkBool32           integerDotProduct64BitSignedAccelerated;
+    VkBool32           integerDotProduct64BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitSignedAccelerated;
+    VkBool32           integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
+} VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+
+
+
 #define VK_KHR_pipeline_library 1
 #define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1
 #define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library"
diff --git a/framework/delibs/decpp/deRandom.hpp b/framework/delibs/decpp/deRandom.hpp
index ab20a59..54f39bf 100644
--- a/framework/delibs/decpp/deRandom.hpp
+++ b/framework/delibs/decpp/deRandom.hpp
@@ -181,7 +181,12 @@
 template<typename T>	T			randomScalar	(de::Random& rnd, T minValue, T maxValue);
 template<> inline		float		randomScalar	(de::Random& rnd, float minValue, float maxValue)		{ return rnd.getFloat(minValue, maxValue); }
 template<> inline		deInt32		randomScalar	(de::Random& rnd, deInt32 minValue, deInt32 maxValue)	{ return rnd.getInt(minValue, maxValue); }
-template<> inline		deUint32	randomScalar	(de::Random& rnd, deUint32 minValue, deUint32 maxValue)	{ return minValue + rnd.getUint32() % (maxValue - minValue + 1); }
+template<> inline		deUint32	randomScalar	(de::Random& rnd, deUint32 minValue, deUint32 maxValue)	{ if (minValue == 0 && maxValue == 0xffffffff) return rnd.getUint32();
+																											  return minValue + rnd.getUint32() % (maxValue - minValue + 1); }
+template<> inline		deInt16		randomScalar	(de::Random& rnd, deInt16 minValue, deInt16 maxValue)	{ return (deInt16)rnd.getInt(minValue, maxValue); }
+template<> inline		deUint16	randomScalar	(de::Random& rnd, deUint16 minValue, deUint16 maxValue)	{ return (deUint16)(minValue + rnd.getUint16() % (maxValue - minValue + 1)); }
+template<> inline		deInt8		randomScalar	(de::Random& rnd, deInt8 minValue, deInt8 maxValue)		{ return (deInt8)rnd.getInt(minValue, maxValue); }
+template<> inline		deUint8		randomScalar	(de::Random& rnd, deUint8 minValue, deUint8 maxValue)	{ return (deUint8)(minValue + rnd.getUint8() % (maxValue - minValue + 1)); }
 
 } // de
 
diff --git a/modules/gles3/functional/es3fFboCompletenessTests.cpp b/modules/gles3/functional/es3fFboCompletenessTests.cpp
index 5a07bba..3a65a00 100644
--- a/modules/gles3/functional/es3fFboCompletenessTests.cpp
+++ b/modules/gles3/functional/es3fFboCompletenessTests.cpp
@@ -130,6 +130,11 @@
 	GL_RGBA32F, GL_RGBA16F, GL_R11F_G11F_B10F, GL_RG32F, GL_RG16F, GL_R32F, GL_R16F,
 };
 
+// GL_QCOM_render_shared_exponent
+static const FormatKey s_qcomRenderSharedExponent[] =
+{
+	GL_RGB9_E5,
+};
 // GL_OES_texture_stencil8
 static const FormatKey s_extOESTextureStencil8[] =
 {
@@ -168,6 +173,14 @@
 		"DEQP_gles31_core_compatible GL_EXT_render_snorm",
 		(deUint32)(REQUIRED_RENDERABLE | COLOR_RENDERABLE | TEXTURE_VALID | RENDERBUFFER_VALID),
 		GLS_ARRAY_RANGE(s_extRenderSnorm)
+		},
+
+	{
+		"GL_QCOM_render_shared_exponent",
+		// This is already texture-valid in ES3, the extension just adds RBO
+		// support to RGB9_E5 and make it color-renderable.
+		(deUint32)(REQUIRED_RENDERABLE | COLOR_RENDERABLE | RENDERBUFFER_VALID | TEXTURE_VALID),
+		GLS_ARRAY_RANGE(s_qcomRenderSharedExponent)
 	},
 };
 
diff --git a/scripts/android/build_apk.py b/scripts/android/build_apk.py
index 1c9cec9..e170364 100644
--- a/scripts/android/build_apk.py
+++ b/scripts/android/build_apk.py
@@ -206,7 +206,7 @@
 		androidBuildTools = ["aapt", "zipalign", "dx"]
 		for tool in androidBuildTools:
 			if which(tool, [self.env.sdk.getBuildToolsPath()]) == None:
-				raise Exception("Missing Android build tool: %s" % toolPath)
+				raise Exception("Missing Android build tool: %s" % tool)
 
 		requiredToolsInPath = ["javac", "jar", "jarsigner", "keytool"]
 		for tool in requiredToolsInPath: