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: